LoginSignup
4
8

More than 3 years have passed since last update.

シングルサインオンサービスKeycloakとNextCloudを連携する

Last updated at Posted at 2019-05-23

TL;DR

設定手順

  • 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タブ

  • username, email, role listの3つを設定します

    • 01_mappers.jpg
  • usernameとemailをマップします

Name Mapper Type Property Friendly Name SAML Attribute Name SAML Attribute NameFormat
username username username username username Basic
email User Property email email email Basic
  • さらに,Role Listを作成します
    • 02_roles.jpg
フィールド
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>.....
);

準備

SAMLアプリ設定

  • NextCloud公式は,"SSO & SAML authentication"アプリケーションを提供しているので,こちらを使います
  • ログイン画面後の右上にあるユーザ記号をクリックして"アプリ"をクリックします
    • 03_application.jpg
  • 左側メニューから"連携"カテゴリをクリックし,"SSO & SAML authentication"について,"ダウンロードして有効化する"をクリックします
    • 04_ssoApplication.jpg
  • インストールが完了したら,右上にあるユーザ記号をクリックして"設定"をクリックします
    • 管理者権限を持っていると表示される"管理"カテゴリに,"SSOとSAML認証"メニューが表示されているので,クリックします
    • "組み込みのSAML認証を使用する"をクリックし,設定フォームに必要な情報を記入します
設定フォーム 設定値
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
電子メールアドレスをマップする属性 email

公開X.509証明書について

  • 以下のURLから<dsig:X509Certificate>タグ内の,MII〜で始まる文字列をコピーします
https://sso.example.com/auth/realms/dev/protocol/saml/descriptor
  • コピーした文字列の先頭に-----BEGIN CERTIFICATE-----の行を,末尾に-----END CERTIFICATE-----の行を付与して,フォームに記入します

動作確認

  • 別のブラウザで,NextCloudのログイン画面にアクセスします
    • NextCloudをログアウトしてしまうと,
    • "SSO & SAML log in"ボタンが表示されることを確認します
    • 07_login.jpg
  • "SSO & SAML log in"ボタンをクリックすると,Keycloakのログイン画面に遷移するので,当該Realmに登録されたユーザでログインを試みます
    • 08_keycloak.jpg
  • NextCloudにログインできれば成功です
    • 09_nextcloud.jpg

参考

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8