見出し画像

KeycloakによるSSO(シングルサイン)

これは、Keycloak をアイデンティティ プロバイダーとして利用してシングル サインオンを使用するように Nextcloud を構成した方法を文書化しています。Nextcloud と Keycloak の統合に関する公式ドキュメントはありますが、他にもいくつかのガイドを見つけましたが、中には互いに直接競合するものもありましたが、それらをつなぎ合わせることで実用的なソリューションが得られました。

Nextcloud 側設定
Nextcloud バージョン: 21.0.2
オペレーティング システムとバージョン: Centos8 Apache または nginx バージョン: Apache 2.4
PHP バージョン: 7

まず、SSO の構成中に Nextcloud インスタンスからロックアウトされないように注意してください。複数のバックエンドを許可するには、「グローバル設定」を設定します。

SAML設定を構成できない アプリのバージョン 5.0.0 でも同じ問題が発生しました。アプリのバージョン 4.1.1 では、これらの問題は存在しません。
4.1.1をDownload どうやって入れ替えるか・・・ Nextcloudにアップロード: ダウンロードしたプラグインをNextcloudのインストールディレクトリ内のappsフォルダにアップロードします。これはFTPやSSHを通じて行うことができます。 アプリの有効化: Nextcloudの管理画面にログインし、「アプリ」セクションに移動します。アップロードしたプラグインをリストから見つけて「有効にする」をクリックします。

https://apps.nextcloud.com/apps/user_saml/releases?platform=26 にあった


SP側で作ったX509 での 証明書、鍵を使う

172.20.11.** X509
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC0dLTFyf3KQF1OMclMFSjIGnshrtlrYibqxLVLbKZMG3oZWjGjRk3+qpAF2JH1ykqohmxEccp9LP8k
h+FOq56/jjxnBRiovVIBCJkTo+P9p3GeeeNW+v0xVRURn+ZdeRNfnJ/jkFUnfdR6
fwgELu1v0Zp56BlK8/u/BAsrRz/16uaYmBongft1QjzVyzAvFNdsVI3keD+6U2WH
vAYis841+rzcmfhrhm+LuB04YPSJPx3KZaaSjoeWnxiHhFgFE/jicTj9DHnZNnFg
wCcQrphD/VT7DMtvLBzVbotI6hdKxMqbztrUYSdWFRo/VpZx8s9Fay+IelocF3IH
ksX5ucyxAgMBAAECggEAdy1EXgPiunn7pTK4MKkgv9bNTxd8u7Cc5xt2aBOfWFAl
OS0Z7yz1QaU/bLz02JD68YWlZyaHhlf7QRMEN8KcGwJC3f69pGM0Dz6wagoo/lJh
dTombEFiifwY6ATkTQMzSkfUSKP/uQ8fDq9qiei8IscY8D3axmeP8T0oazKpCS03
cfoWjBOxZKntacllf62d1z79DHgT7nlehgU5cKargHtJ+UsM0KJXkGDMQYhIHRP6
tccM5KThMcoxXzSDhYGzNeEpn8M+KbXGi2Qlu7sxtXjAntjeweT8DMii6E+ASCt2
+919scgA9cQ4AQOTlbDPeaAPbVouh+qkyDBM39TSKQKBgQDfrUmkhwRaddmmz871TkyoQ4KSPVIeVAfMkZaYjLLGKDMLzplmyRrzBBjPU7fbRjY9WfDIBGXIhWEUgXrM6/qgT44ieHONyWIpxRMbcpYWAbkgHFUmUChkyHNJ8I522fh4ra+bZjYWwV8U/2G3XWpkjD8/YWR+n5st1fpFxG5M2wKBgQDOiH+Paf3EoC+Xbsn4mnknpIb1kGHs+vKZ
WwFQ7I8gEpD3VGedN6EJdgGUQ6vMQZpO/47j20/U5oShXrYMEueuk3Ph+ma07mNLrq6EdKDSgWu9ZTuCd+Pr/rYOGz6tOuqt5VeC0J0/41WEg9kRm59MxMp1J3FMnz68
0CyZPQh8YwKBgFCZ4S+od6khTo0N1UYQMQ9xRFvuPOkw3p6Y1+ugx8sgMUTP7fdc
AJoRn98WC+q4IlN5VYq+Cu93IMSC4/10C5w5Dr7dKMavCvCCU6BQakUD2fH4Q7bK
q8Old+XtCWlKon7aF62n51XL2Ld4T34D65LP9vqf3dbDLOgXc1gwsI6BAoGARh2O
+Lgp/9vF7GofRTfkE7JGYw2eQR68x5VesANvX5sN/fl4p6YgFJ8sUBJdO5217kXS
U8a7pnKP6lzF/vlYECtc9wXUYm5f5WyrMKqLgouPcR/yAQwEo7S4R7e2IodS7rBi
cjWyfOMHwFImmlSz0xMoDHfUfge9+8nMqkVPITMCgYACKqRUECKblpyKCJ0CeYxl
eQcKJQ4o5utizYRGzfC/Resu756HuCOS4itJk7Et9iqXxW12h2bmOyrQm4RbQ5xY
OJI+N0RfZwzSh73OmJC2kEnq2dBp+IHta11yvnUokUNe03uUU0B0/szwOpqktHhu
8U0ePA3NCWpeZLQTy/M6EQ==
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
MIID0TCCArmgAwIBAgIUIta0I+4erQ5iCQV6UEv0c2ECqZMwDQYJKoZIhvcNAQEL
BQAweDELMAkGA1UEBhMCSlAxEjAQBgNVBAgMCUhJUk9TSElNQTERMA8GA1UEBwwIZnVrdXlhbWExDTALBgNVBAoMBE9TQ0ExDzANBgNVBAMMBnNoYXJlMTEiMCAGCSqGSIb3DQEJARYTZm1hLXIuZnVqaWlAZm1lZC5qcDAeFw0yMzEyMjcwMDIxNTdaFw0yNDAxMjYwMDIxNTdaMHgxCzAJBgNVBAYTAkpQMRIwEAYDVQQIDAlISVJPU0hJTUExETAPBgNVBAcMCGZ1a3V5YW1hMQ0wCwYDVQQKDARPU0NBMQ8wDQYDVQQDDAZzaGFyZTExIjAgBgkqhkiG9w0BCQEWE2ZtYS1yLmZ1amlpQGZtZWQuanAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0dLTFyf3KQF1OMclMFSjIGnshrtlrYibqxLVLbKZMG3oZWjGjRk3+qpAF2JH1ykqohmxEccp9LP8kh+FOq56/jjxnBRiovVIBCJkTo+P9p3GeeeNW+v0xVRURn+ZdeRNfnJ/jkFUnfdR6fwgELu1v0Zp56BlK8/u/BAsrRz/16uaYmBongft1QjzVyzAvFNdsVI3keD+6U2WHvAYis841+rzcmfhrhm+LuB04YPSJPx3KZaaSjoeWnxiHhFgFE/jicTj9DHnZNnFgwCcQrphD/VT7DMtvLBzVbotI6hdKxMqbztrUYSdWFRo/VpZx8s9Fay+IelocF3IHksX5ucyxAgMBAAGjUzBRMB0GA1UdDgQWBBSGHEH+DzEvMJRDlKE2bGiBaBzSVzAfBgNVHSMEGDAWgBSGHEH+DzEvMJRDlKE2bGiBaBzSVzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCm46jC2Rl8tOv29kBuh0FKQQDftPOCi2YoA34Wws79JEarIgEwiB1u/O/ROF9WGZvhNtjA0qAAmjUR/kEIEXRQfrgZQ68Ym0PZqDC4gePowOxEfSEa8b7N6tQtWf6weGMR/CW39zWaqIdMPB08oAkfwP9O3xIP+L3Z3mL1YZ2hfEn0MuxQR3uo3XAqtJF40GlcucHaejq2ZBz917qWhZoUUkaFUNhqY0Vx9Bljxwux7YT7g5gHEl3OJvf88WO6eR6PVNeKX74jlGzZg3iCskqnd8NItysHY4+bmW9vVZmaQGdhRoiGkk6c8Io38usWyy0A42UcfludNEvHiHZ1sYBd
-----END CERTIFICATE-----

IDP設定にもにも、同様の 鍵、証明書(IDP)を入れる

上手く入ると、XMLファイルが作られて ダウンロードができる
XML が作れた 
<?xml version="1.0"?> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2024-01-11T23:44:35Z" cacheDuration="PT604800S" entityID="http://172.20.11.**/nextcloud/index.php/apps/user_saml/saml/metadata"> <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://172.20.11.**/nextcloud/index.php/apps/user_saml/saml/sls" /> md:NameIDFormaturn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://172.20.11.**/nextcloud/index.php/apps/user_saml/saml/acs" index="1" /> </md:SPSSODescriptor> </md:EntityDescriptor>

この XMLを Keycloak 側にインポートしてクライアントを作る


Keycloakで新しいクライアントを作成し、ファイルのインポートを選択します。以前にダウンロードした medata.xml をアップロードし、[OK] をクリックします。
次に、「マッパー」タブに移動します。ロールマッピングが必要ない場合は、削除してください。まだ使っていませんが、今後また検討してみようと思います。
·         Keycloakに管理者権限でログインし,Nextcloudと連携したいRealmを選択します
·         "Clients"から"Create"を選択します
·         ClientIDを,https://nextcloud.example.com/apps/user_saml/saml/metadata のように,NextcloudのURLに,"/apps/user_saml/saml/metadata"を付与したものに設定します
o    NextCloud側が固定されたClientIDでアクセスするので,Client IDはこのようにURLに設定する必要があります
o    (190820追記) NextCloud 16.0.4から,https://nextcloud.example.com/index.php/apps/user_saml/saml/metadataに変更されているようです
·         Client Protocolを"saml"でClientを作成します.
 
 
次に、新しいマッパーを作成します。
ユーザー名
名: ユーザー名
マッパー タイプ: ユーザー プロパティ
プロパティ: ユーザー名
SAML 属性名: ユーザー名
SAML 属性 名前形式: 基本
電子メール
名: 電子メール
マッパー タイプ: ユーザー プロパティ
プロパティ: 電子メール
SAML 属性名: 電子メール
SAML 属性 NameFormat: Basic
ロール
名: ロール
マッパー タイプ: ロール リスト
ロール属性名: ロール
フレンドリ名: ロール
SAML 属性名の形式: 基本
単一ロール属性: オン
左メニューのクライアントスコープからrole_listを選択 ⇒ マッパーからrole_listを選択 ⇒ Single Role Attributeをオンにしておく。
この設定を入れないと、SAML認証時、Nextcloudが謎の例外を吐いてしまい認証に失敗する。

設定変更 https://dev.growi.org/5e4cfa39a2bdcf0048d69eb9
KeycloakでAuthNRequestの署名要件をオフにする
1. Keycloak管理コンソールにアクセス: ブラウザを使用してKeycloakの管理コンソールにアクセスし、管理者アカウントでログインします。
2. 適切なレルムを選択: 左側のメニューから操作するレルムを選択します。
3. クライアント設定に移動: 左側のメニューから「Clients」(クライアント)を選択し、設定を変更したいクライアントをクリックします。
4. SAML設定を編集: クライアントの設定ページにある「Settings」タブの中の「SAML Settings」セクションに移動します。
5. 署名要件の変更: 「Sign Documents」や「Sign Assertions」の設定を確認し、必要に応じてこれらを無効にします。これにより、AuthNRequestの署名要件をオフにすることができます。
6. ホワイトリストの設定: 「Valid Redirect URIs」フィールドに、ホワイトリストに登録するURLを入力します。これにより、IDPがこれらのURLに基づいてリダイレクトを許可するようになります。
7. 変更を保存: 設定を変更したら、「Save」ボタンをクリックして変更を保存します。


この記事が気に入ったらサポートをしてみませんか?