TL;DR
- SSOサービスKeycloakと,WikiシステムGrowiを,連携させる方法を説明します
- 両者が,Dockerコンテナで稼働している状況で進めます
- 各サービスのコンテナ立ち上げ方法は以下の参考リンクをご覧ください
- GrowiへのログインがKeycloakへのログインに置き換えられます
- KeycloakはGrowi以外のサービスへも連携できるので,Keycloakでユーザを作ると,連携した他のサービスのユーザ作成が不要になります
手順
- Keyclock,Growi両方で設定が必要です
- Keyclock:
- Keycloak側でRealm(レルム,領域)を作成し,ユーザやグループを作ります
- Keycloakで,Growi用のClientを作成し,Growiからのリクエストを受け付けます
- Growi:
- SAMLの設定を行い,Keycloakに接続します
Keycloakの設定
- Administration Consoleで作業を行います
Realmの作成
-
まず,(複数の)Webサービスで利用する,Realmを作成します
-
画面左上のドロップダウンリストから,"Add Realm"を選択します(最初は"Master"になっている)
-
Name: "dev"のような適当な名前を付けてCreateします
-
画面左上の選択中のRealmが"dev"になっていることを確認してください
X.509証明書の取得
- 以下のような,Realmを指定したURLにアクセスすると,Realmの情報を見ることができます
https://sso.example.com/auth/realms/dev/protocol/saml/descriptor
ユーザの作成
- 画面左のメニューから,"Manage"カテゴリの"Users"をクリックします
- "Credentials"タブで,パスワードを設定します
Growi用Clientの作成
- Growiが接続されるClientを作ります
- 画面左のメニューから"Clients"を選択します
- "Lookup"タブから,"Create"ボタンをクリックします
- Client IDにサービス名を設定して"Save"します(今回の場合は
growi
にしました.)- 他の設定は後ほど変更します
- 後述の説明にしたがって,各タブに設定をします
- Settingsタブと,Mappersタブで設定を記述します
Settingsタブ
設定名 | 設定値 |
---|---|
Client ID | growi |
Enabled | ON |
Client Protocol | saml |
Include AuthnStatement | ON |
Sign Documents | ON |
Sign Assertions | ON |
Signature Algorithm | RSA_SHA1 |
SAML Signature Key Name | KEY_ID |
Canonicalization Method | EXCLUSIVE |
Force POST Binding | ON |
Front Channel Logout | ON |
Force Name ID Format | ON |
NAME ID Format | username |
Root URL | GrowiのURL(e.g. https://growi.example.com/ ) |
Valid Redirect URIs | GrowiのURL以下の領域 (e.g. https://growi.example.com/*
|
Master SAML Processing URL | ログイン後のコールバックURL (e.g. https://growi.example.com/passport/saml/callback ) |
- さらに,"Fine Grain SAML Endpoint Configuration"を展開して,以下の設定を行います
設定名 | 設定値 |
---|---|
Assertion Consumer Service POST Binding URL | GrowiのURL(e.g. https://growi.example.org/ ) |
Assertion Consumer Service Redirect Binding URL | ログイン後のコールバックURL (e.g. https://growi.example.com/passport/saml/callback ) |
Logout Service Redirect Binding URL | ログイン後のコールバックURL (e.g. https://growi.example.com/passport/saml/callback ) |
Mappersタブ
- Mappersタブで,Growiのユーザ情報として必要な情報と,keycloakで管理しているユーザ情報を紐付けます
- "Create"ボタンをクリックして,以下の表の通り,マッピングするエントリを追加します
- まず"Mapper Type"のドロップダウンリストからTypeを選択すると,入力が必要となるフォームが表示されます
Name | Mapper Type | Property | Friendly Name | SAML Attribute Name | SAML Attribute NameFormat |
---|---|---|---|---|---|
username | User Property | username | username | username | Basic |
id | User Property | id | id | id | Basic |
User Property | Basic | ||||
firstName | UserProperty | firstname | firstname | firstname | Basic |
lastName | UserProperty | lastname | lastname | lastname | Basic |
Growiの設定
- 管理者権限を持つアカウントでログインして作業します
- GrowiはGUIでKeycloak(SAML認証)との接続ができます
- "管理"をクリックし,"セキュリティ設定"を選びます
- "認証機構設定"で,"SAML"タブをクリックします
- 以下の表の通り,SAML設定を行います
- 必要な情報を入力後,"更新"をクリックして設定を保存します
設定名 | 設定値 |
---|---|
SAML | ON |
コールバックURL | ログイン後のコールバックURL (e.g. https://growi.example.com/passport/saml/callback ) |
エントリーポイント | keycloakの当該Realmに対するSAMLエントリポイント (e.g. https://sso.example.com/auth/realms/dev/protocol/saml ) |
発行者 | issuers.Clientで設定したClient ID (今回の場合はgrowi ) |
証明書 | 後述 |
ID | id |
ユーザー名 | username |
メールアドレス | |
姓 | lastName |
名 | firstName |
Attribute Mapping Options | チェックしない |
x.509証明書について
- KeycloakのRealms設定のときに取得した,x.509証明書を,当該欄に記載します.
-----BEGIN CERTIFICATE-----
MII〜
-----END CERTIFICATE-----
動作確認
- いったんログアウトすると,Growiのログイン画面に移りますが,このとき,ログイン画面に"OAuth"という文字が表示されるようになります
- マウスを近づけると,"ログイン" with SAMLというボタンが出現するので,クリックします
- Keycloakのログイン画面に遷移しますので,Realmで作成したユーザでログインします
- Growiの画面に遷移し,作業を開始することができます