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の画面に遷移し,作業を開始することができます















