株式会社 Vitalizeで webエンジニアをしている @nagaemon です。
現在は長野の支社にお世話になっており、現在はエンジニア + 地方創生事業に携わっています。
好きな言語はrubyです。
今回はGrowiとSAML認証を用いて連携の方法と、その際に詰まった
ポイントを残しておこうと思います。
Growiとは
https://growi.org/ja/
GROWIは、MITライセンスで公開されているオープンソースのウィキソフトウェアである。
日本のエンジニアによって開発されていることで有名です。
また、SAMLやLDAP認証、外部のOAuthプロバイダを利用したログインをサポートしている点が特徴に挙げられます。
ログイン実装
今回は
こちらのGrowi Keycloak 間でのSAMLを用いてのログインを実装していこうと思います。ほとんどはこちらのGROWI Developers Wikiの開発用のSAMLサーバーセットアップを参考にしました。
ただ、こちらで使われているkeycloakイメージはjboss/keycloakとなっており、
quay.io/keycloak/keycloakのイメージで立ち上げた場合と差分があったので、メモに残しました。
Growiの設定
立ち上げはこちらのGrowi Docsを参考に立ち上げました。
https://docs.growi.org/ja/admin-guide/getting-started/docker-compose.html#growi-%E3%81%AE%E3%82%A2%E3%83%83%E3%83%95%E3%82%9A%E3%82%AF%E3%82%99%E3%83%AC%E3%83%BC%E3%83%88%E3%82%99
admin権限でログイン後はサイドバー左下の歯車アイコンからwiki管理TOPへ行くので、そこからさらにセキュリティ設定へ
もしくはhttp://localhost:3000/admin/security から直接遷移できます。
下にスクロールすると認証機構設定があるので、そこで「SAML」を選択
SAMLを有効にした後に、コールバックURLをメモしておきましょう、Keycloak側で必要になります。
Keycloakの設定
keycloak側の設定はこちらの本家のGetting start を参考に立ち上げます。https://www.keycloak.org/getting-started/getting-started-docker
レルム クライアントの作成
今回はレルムを[demo-realm]
クライアントを[growi-client]
として作成しました。
レルム側
クライアント側
General Settings
Client type: saml
Client ID: growi-client
Login settings
Root URL: http://localhost:3000/
Home URL: http://localhost:3000/
Valid redirect URIs: http://localhost:3000/*
Master SAML Processing URL: http://localhost:3000/passport/saml/callback (← Growi側でメモしたコールバックURL)
クライアント設定
Client(クライアント一覧画面) → growi-client選択 → Settingタブ選択
SAML capabilities
Signature and Encryption
- Sign documents: ON
- Sign assertions: ON
- Signature algorithm: RSA_SHA1
- SAML Signature Key Name : KEY_ID
- Canonicalization Method : EXCLUSIVE
Logout settings
Keys設定
- Client signature required: OFF
- ここはOFFにしておかないとSigAlg was nullというエラーが出続けます。
- 参考 Keycloak and Spring SAML: SigAlg was null
クライアントマッパーの設定
Keycloakのバージョンが16以降はこのクライアントマッパーの位置が変更になっていたので、探すのに苦労しました。
場所は同ページのタブ「Client scope」選択後のxxxxx-dedicated(この場合はgrowi-client-dedicated)内にて設定可能
Mappersタブ内の Add apperを選択して追加する。
Add mapper → By configuration → User Propertyの順に選択
- id
- lastname
- firstname
- mapper-username
idからemailまでの設定に関しては、「Name」、「Property」、「Friendly Name」、「SAML Attribute Name」は同名にする
mapper-usernameに関しては
- mapper-username
- Mapper Type: User Property
- Property: username
- Friendly Name: User's name
- こちらは適当、わかりやすいものに設定
- SAML Attribute Name: uid
全て作成するとしたの図のようになる
keycloak側でのユーザー作成
- Username: test_user
- Email: test_user@example.com
- First name: test
- Last name: user
で作成
作成後はCredentialsタブ→ Set passwordからユーザーのパスワードも設定しておきます。
Growi SAML設定
http://localhost:3000/admin/security
にて初めに設定した認証機構設定に移動できます。
keycloak側での設定した値を用いて、こちらも変更します。
Basic Settings
-
エントリーポイント: http://localhost:8080/realms/demo-realm/protocol/saml
-
発行者: growi-client
-
証明書:
Attribute Mapping
- ID: id
- username: uid
- メールアドレス: email
を入力する
ログイン確認
ログアウトもしくはhttp://localhost:3000/login にてログイン画面へ
External Auth で添付画像のようなログインボタンが表示されるはずです。
押下後にkeycloakのログイン画面へ、keycloak のユーザー登録したユーザー名(もしくはemail)とpasswordを入力