Caputchin
連携ガイド

Keycloak

Markdown で表示

Keycloak はサーバーであって、スクリプトを埋め込むページではありません。そのため Caputchin は Keycloak の extension として届きます。Keycloak に入れる provider JAR です。これがログイン、パスワードリセット、登録のページに Caputchin ウィジェットをレンダリングし、フローが進む前に Keycloak の内側でトークンを検証します。チェックボックスのウィジェットもゲームも、どちらも動きます。

この extension はオープンソースです。完全なリファレンス(すべての設定プロパティ、realm エクスポートの JSON、theme の契約、互換性マトリクス)はリポジトリにあります:github.com/Caputchin/caputchin-keycloak

1. extension をインストールする

provider JAR をビルドして Keycloak に置き、それから再ビルドします:

# build (no JDK on the host? run it in Docker)
docker run --rm -v "$PWD":/work -w /work maven:3.9-eclipse-temurin-21 mvn -DskipTests package

cp target/caputchin-keycloak.jar "$KEYCLOAK_HOME/providers/"
"$KEYCLOAK_HOME/bin/kc.sh" build
"$KEYCLOAK_HOME/bin/kc.sh" start --optimized

Keycloak が provider を発見するには kc.sh build が必要です。

2. ウィジェットのレンダリング方法を選ぶ

方法は 2 つあり、realm ごとに選びます。

ターンキー:同梱の theme(独自 theme は不要)

JAR には caputchin ログイン theme が同梱されています。Realm Settings → Themes → Login theme: caputchin で設定すると、テンプレートを編集せずにログイン、リセット、登録のページにウィジェットがレンダリングされます。素の Keycloak ログインを使うなら、これが最速の道です。

ヘッドレス:あなた自身の theme がウィジェットをレンダリングする

独自のログイン theme(たとえば Keycloakify の React theme)を出すなら、あなたの theme を残したまま extension をヘッドレスで動かします。ウィジェットの設定をページのコンテキストに公開し、トークンを検証します。あなたの theme が <caputchin-widget>(または <caputchin-game>)要素をレンダリングし、あなたのデザイントークンでスタイルを当てます。トークンのフィールドは caputchin-token です。属性の完全な契約と Keycloakify の例は、リポジトリの theme ガイド にあります。

3. フローにバインドする

Authentication → Flows で、保護したいフローを複製し、execution を入れ替えます:

フローexecution をこれに設定
Browser (login)Caputchin Username Password Form
Reset CredentialsCaputchin Reset Credential - Choose User
Registration登録フォームに Caputchin を追加

ログインとリセットのチャレンジは、別ステップとしてではなく、資格情報と同じページにレンダリングされます。各 execution の設定(歯車)を開いて、あなたのキーを設定してください。direct grant のフローにはチャレンジを追加しないでください。そこにはブラウザがないので、API のトークンリクエストを壊してしまいます。

4. キーを設定する

execution の設定で、次を設定します:

  • サイトキー:あなたの公開鍵(cpt_pub_...)。ブラウザに送られる唯一の値です。
  • シークレットキー:あなたのシークレット(cpt_sec_...)。リテラルとして保存しても、環境変数を指しても(realm エクスポートに決して入らないように)、${vault.*} 参照を使ってもかまいません。
  • ウィジェットモードcheckboxinvisible、または game。加えてサイズ、locale(既定では realm の locale に従います)、スキン。
  • Fail closed:既定でオン。検証の障害時にはボットを通すのではなくブロックします。

より豊かな見た目(どのゲーム、スキン、ブランド)は Caputchin ダッシュボード でサイトキー自体に一度だけ設定するので、ここでは繰り返しません。

5. Content Security Policy でウィジェットを許可する

Keycloak の既定のログイン CSP は、ウィジェットに必要なものより厳しめです。Realm Settings → Security Defenses → Content Security Policy で、ローダースクリプト、検証ホスト、WebAssembly を許可してください。正確な値は リポジトリの CSP ガイド にあります。

ローカルで試す

リポジトリには、ローカルの Caputchin スタックに配線された 1 コマンドのローカル Keycloak(e2e/)が含まれており、デプロイ前にゲートされた 3 つのフローすべてをクリックして通せます。リポジトリの README を参照してください。

このページの内容