TL;DR
- SSOサービスKeycloakと,クラウドストレージNextCloudを連携させる方法を説明します
- KeycloakとNextCloudは,Dockerコンテナで稼働している状況で進めます
- それぞれのセットアップ方法は関連記事を参考にしてください
- Keycloakと他のサービスとの連携記事も参考にしてください
設定手順
- KeycloakとNextCloudの連携は,以下の手順で行います
- KeycloakのRealmに,NextCloud用のClientを作成し,設定します
- NextCloudで,Keycloakに接続する設定を行います
Keycloak設定
- Keycloakに管理者権限でログインし,Nextcloudと連携したいRealmを選択します
- "Clients"から"Create"を選択します
- ClientIDを,
https://nextcloud.example.com/apps/user_saml/saml/metadata
のように,NextcloudのURLに,"/apps/user_saml/saml/metadata"を付与したものに設定します- NextCloud側が固定されたClientIDでアクセスするので,Client IDはこのようにURLに設定する必要があります
- (190820追記) NextCloud 16.0.4から,
https://nextcloud.example.com/index.php/apps/user_saml/saml/metadata
に変更されているようです
- Client Protocolを"saml"でClientを作成します.
Settingsタブ
フィールド名 | 値 |
---|---|
Client Signature Required | OFF |
Root URL | NextCloudのURL(e.g. https://nextcloud.example.com ) |
Valid Redirect URIs | NextCloudのURL以下の領域 (e.g. https://nextcloud.example.com/*
|
Mappersタブ
Name | Mapper Type | Property | Friendly Name | SAML Attribute Name | SAML Attribute NameFormat |
---|---|---|---|---|---|
username | username | username | username | username | Basic |
User Property | Basic |
フィールド | 値 |
---|---|
Name | role list |
Mapper Type | Role list |
Role attribute name | Role |
Friendly Name | |
SAML Attribute NameFormat | Basic |
Single Role Agttribute | チェック |
NextCloud設定
(オプション)リダイレクト設定
- NextCloudをリバースプロキシの背後にある場合,ログイン処理後のリダイレクト先がnginxで指定しているホスト名に変わってしまうので, NextCloudの
config/config.php
に,以下の2つの項目を追加してコンテナを再起動して,正しく動作するように修正します- もし未設定であれば,設定してください
<?php
$CONFIG = array (
.....<snip>.....
'overwritehost' => 'nextcloud.example.com',
'overwriteprotocol' => 'https',
.....<snip>.....
);
準備
- 高機能クラウドストレージNextCloudをdocker-composeでセットアップするの記事で説明したNextCloud(バージョンアップに応じてnextcloud:16.0.1-apacheに変更します)と,nginxによるリバースプロキシ環境で行います
- adminユーザでログインします
SAMLアプリ設定
- NextCloud公式は,"SSO & SAML authentication"アプリケーションを提供しているので,こちらを使います
- ログイン画面後の右上にあるユーザ記号をクリックして"アプリ"をクリックします
- 左側メニューから"連携"カテゴリをクリックし,"SSO & SAML authentication"について,"ダウンロードして有効化する"をクリックします
- インストールが完了したら,右上にあるユーザ記号をクリックして"設定"をクリックします
設定フォーム | 設定値 |
---|---|
Nextcloud デスクトップクライアントにSAML認証を使用する(ユーザーの再認証が必要) | チェック しない |
複数のユーザーのバックエンド(LDAPなど)の使用を許可する | チェック |
UIDをマップする属性 | username |
IdPエンティティの識別子 | https://sso.example.com/auth/realms/dev |
SPが認証要求メッセージを送信するIdPのURLターゲット | https://sso.example.com/auth/realms/dev/protocol/saml |
IdPの公開X509証明書 | 後述 |
表示名をマップする属性 | username |
電子メールアドレスをマップする属性 |
公開X.509証明書について
- 以下のURLから
<dsig:X509Certificate>
タグ内の,MII〜で始まる文字列をコピーします
https://sso.example.com/auth/realms/dev/protocol/saml/descriptor
- コピーした文字列の先頭に
-----BEGIN CERTIFICATE-----
の行を,末尾に-----END CERTIFICATE-----
の行を付与して,フォームに記入します
動作確認
- 別のブラウザで,NextCloudのログイン画面にアクセスします
- "SSO & SAML log in"ボタンをクリックすると,Keycloakのログイン画面に遷移するので,当該Realmに登録されたユーザでログインを試みます
- NextCloudにログインできれば成功です