LoginSignup
2
4

Keycloak(Quarkus distribution)を用いてGrowiへのログイン認証

Last updated at Posted at 2023-08-17

株式会社 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 から直接遷移できます。
スクリーンショット 2023-08-17 10.49.17.png

下にスクロールすると認証機構設定があるので、そこで「SAML」を選択
SAMLを有効にした後に、コールバックURLをメモしておきましょう、Keycloak側で必要になります。
スクリーンショット 2023-08-17 10.52.23.png

Keycloakの設定

keycloak側の設定はこちらの本家のGetting start を参考に立ち上げます。https://www.keycloak.org/getting-started/getting-started-docker

レルム クライアントの作成

今回はレルムを[demo-realm]
クライアントを[growi-client]
として作成しました。

レルム側

Realm name: demo-realm
スクリーンショット 2023-08-17 10.55.22.png

クライアント側

General Settings

Client type: saml
Client ID: growi-client

スクリーンショット 2023-08-17 10.54.29.png

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)

スクリーンショット 2023-08-17 10.57.38.png

クライアント設定

Client(クライアント一覧画面) → growi-client選択 → Settingタブ選択

SAML capabilities

  • Name ID format: username
  • Force POST binding: ON
  • Include AuthnStatement : ON
    スクリーンショット 2023-08-17 11.06.40.png

Signature and Encryption

  • Sign documents: ON
  • Sign assertions: ON
  • Signature algorithm: RSA_SHA1
  • SAML Signature Key Name : KEY_ID
  • Canonicalization Method : EXCLUSIVE
    スクリーンショット 2023-08-17 11.13.35.png

Logout settings

  • Front channel logout: ON
    スクリーンショット 2023-08-17 11.15.14.png

Keys設定

クライアントマッパーの設定

Keycloakのバージョンが16以降はこのクライアントマッパーの位置が変更になっていたので、探すのに苦労しました。

場所は同ページのタブ「Client scope」選択後のxxxxx-dedicated(この場合はgrowi-client-dedicated)内にて設定可能
Mappersタブ内の Add apperを選択して追加する。

スクリーンショット 2023-08-17 11.24.46.png

Add mapper → By configuration → User Propertyの順に選択
スクリーンショット 2023-08-17 11.29.34.png

  • id
  • lastname
  • firstname
  • email
  • mapper-username

idからemailまでの設定に関しては、「Name」、「Property」、「Friendly Name」、「SAML Attribute Name」は同名にする

スクリーンショット 2023-08-17 11.31.41.png

mapper-usernameに関しては

  • mapper-username
  • Mapper Type: User Property
  • Property: username
  • Friendly Name: User's name
    • こちらは適当、わかりやすいものに設定
  • SAML Attribute Name: uid

スクリーンショット 2023-08-17 11.34.42.png

全て作成するとしたの図のようになる

スクリーンショット 2023-08-17 11.28.00.png

keycloak側でのユーザー作成

スクリーンショット 2023-08-17 11.41.42.png
作成後はCredentialsタブ→ Set passwordからユーザーのパスワードも設定しておきます。

  • password & Password confirmation: 「任意のパスワード」
  • Temporary: どちらでも良いですが、今回はOff
    スクリーンショット 2023-08-17 12.06.43.png

Growi SAML設定

http://localhost:3000/admin/security
にて初めに設定した認証機構設定に移動できます。

keycloak側での設定した値を用いて、こちらも変更します。

Basic Settings

  • エントリーポイント: http://localhost:8080/realms/demo-realm/protocol/saml

    • keycloak内のconfigure(Realm settings)内のEndpointsのリンクを押下後のLocation以降の文字列を記述
      スクリーンショット 2023-08-17 11.47.56.png
  • 発行者: growi-client

  • 証明書:

    • Keycloak の管理画面にアクセス
    • Realm Settings の Keysタブをクリック
    • Algorithm RS256 の Certificate を copy & paste する
      スクリーンショット 2023-08-17 11.53.33.png
      スクリーンショット 2023-08-17 11.55.01.png

Attribute Mapping

  • ID: id
  • username: uid
  • メールアドレス: email
    を入力する

スクリーンショット 2023-08-17 11.55.44.png

ログイン確認

ログアウトもしくはhttp://localhost:3000/login にてログイン画面へ
External Auth で添付画像のようなログインボタンが表示されるはずです。
スクリーンショット 2023-08-17 12.02.46.png

押下後にkeycloakのログイン画面へ、keycloak のユーザー登録したユーザー名(もしくはemail)とpasswordを入力
スクリーンショット 2023-08-17 12.08.07.png

無事ログインできたら成功です!
スクリーンショット 2023-08-17 12.08.19.png

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4