GeekFactory

int128.hatenablog.com

nextcloudとKeycloakのSAML SSO

TL;DR

以下の環境で確認しています。

  • nextcloud 12.0
  • Keycloak 3.4.0.Final

具体的な手順

Keycloakで新しいClientを追加します。認証連携したいユーザがいるRealmで作業してください。

  • クライアントID: https://nextcloud.example.com/index.php/apps/user_saml/saml/metadata
  • クライアントプロトコル: saml
  • クライアント署名が必須: OFF
  • 有効なリダイレクト URI: https://nextcloud.example.com/*
  • マッパー
    • SAML属性 username → User Property username
    • SAML属性 email → User Property email

nextcloudで「SSO & SAML authentication」を設定します。

  • Attribute to map the UID to: username
  • Identity Provider Data
    • Identifier of the IdP entity (must be a URI): https://keycloak.example.com/auth/realms/YOUR_REALM
    • URL Target of the IdP where the SP will send the Authentication Request Message: https://keycloak.example.com/auth/realms/YOUR_REALM/protocol/saml
    • Public X.509 certificate of the IdP: インストレーションでSAML Metadata IDPSSODescriptorを選択するとXMLが表示されるので、<dsig:X509Certificate> 要素に入っているBASE64文字列を入力します。-----BEGIN CERTIFICATE----------END CERTIFICATE----- で囲むのをお忘れなく。
  • Attribute mapping
    • Attribute to map the displayname to: username
    • Attribute to map the email address to: email

なお、SAML SSOを有効にするとローカルユーザでログインできなくなるため、ローカルユーザのウィンドウを開いたまま作業してください。シークレットウィンドウでnextcloudを開いて動作確認するとよいでしょう。

デフォルトでは、SSO後にユーザが存在しない場合は自動的に作成してくれます。

まとめ

KeycloakでID管理を統合すると便利なのでおすすめです。ついでに、バックエンドストレージをS3にしておくとメンテナンスも楽です。