6.4. JavaScript プロバイダー
Red Hat build of Keycloak には、管理者が特定の機能をカスタマイズできるように、ランタイム時にスクリプトを実行する機能があります。
- オーセンティケーター
- JavaScript ポリシー
- OpenID Connect Protocol Mapper
- SAML プロトコルマッパー
6.4.1. オーセンティケーター リンクのコピーリンクがクリップボードにコピーされました!
認証スクリプトは、Authenticator#action(AuthenticationFlowContext) から呼び出される Authenticator#authenticate(AuthenticationFlowContext) action(..) から呼び出される authenticate(..) 関数を少なくとも 1 つ提供する必要があります。
カスタム Authenticator は、最低でも authenticate(..) 関数を提供する必要があります。コード内で javax.script.Bindings スクリプトを使用できます。
script-
スクリプトメタデータにアクセスするための
ScriptModel realm-
RealmModel user-
現在の
UserModel。userを使用できるのは、別のオーセンティケーターがユーザーアイデンティティーの確立に成功し、ユーザーを認証セッションに設定した後にトリガーされるように、スクリプトオーセンティケーターが認証フロー内で設定されている場合です。 session-
アクティブな
KeycloakSession authenticationSession-
現在の
AuthenticationSessionModel httpRequest-
the current
org.jboss.resteasy.spi.HttpRequest LOG-
ScriptBasedAuthenticatorにスコープ指定されたorg.jboss.logging.Logger
authenticate(context) action(context) 関数に渡される context 引数から追加のコンテキスト情報を抽出できます。
6.4.1.1. スクリプトオーセンティケーターを追加する場所 リンクのコピーリンクがクリップボードにコピーされました!
スクリプトオーセンティケーターの使用方法としては、認証の最後にいくつかのチェックを実行することが考えられます。スクリプトオーセンティケーターを (たとえば、アイデンティティー Cookie による SSO 再認証中であっても) 常にトリガーする場合、認証フローの最後にスクリプトオーセンティケーターを REQUIRED として追加し、既存のスクリプトオーセンティケーターを別の REQUIRED の認証サブフローにカプセル化する必要がある場合があります。これが必要なのは、REQUIRED と ALTERNATIVE の実行を同じレベルにすることができないためです。たとえば、認証フロー設定は次のようになります。
- User-authentication-subflow REQUIRED -- Cookie ALTERNATIVE -- Identity-provider-redirect ALTERNATIVE ... - Your-Script-Authenticator REQUIRED
- User-authentication-subflow REQUIRED
-- Cookie ALTERNATIVE
-- Identity-provider-redirect ALTERNATIVE
...
- Your-Script-Authenticator REQUIRED
6.4.2. スクリプトで JAR を作成してデプロイ リンクのコピーリンクがクリップボードにコピーされました!
JAR ファイルは、.jar 拡張子を持つ通常の ZIP ファイルです。
Red Hat build of Keycloak でスクリプトを利用できるようにするには、サーバーにスクリプトをデプロイする必要があります。そのため、以下の構造で JAR ファイルを作成します。
META-INF/keycloak-scripts.json my-script-authenticator.js my-script-policy.js my-script-mapper.js
META-INF/keycloak-scripts.json
my-script-authenticator.js
my-script-policy.js
my-script-mapper.js
META-INF/keycloak-scripts.json は、デプロイするスクリプトに関するメタデータ情報を提供するファイル記述子です。これは、次の構造が含まれる JSON ファイルです。
このファイルは、デプロイする別のタイプのスクリプトプロバイダーを参照する必要があります。
authenticatorsOpenID Connect Script Authenticator 用。同じ JAR ファイルに 1 つまたは複数のオーセンティケーターを設定できます。
policiesRed Hat build of Keycloak Authorization Services を使用する場合の JavaScript ポリシー用。同じ JAR ファイルに 1 つまたは複数のポリシーを設定できます。
mappersOpenID Connect Script Protocol Mapper 用。同じ JAR ファイルに 1 つまたは複数のマッパーを設定できます。
saml-mappersSAML Script Protocol Mapper 用。同じ JAR ファイルに 1 つまたは複数のマッパーを設定できます。
JAR ファイルのスクリプトファイルごとに、スクリプトファイルを特定のプロバイダータイプにマッピングする META-INF/keycloak-scripts.json に対応するエントリーが必要です。そのためには、各エントリーに以下のプロパティーを指定する必要があります。
nameRed Hat build of Keycloak 管理コンソールでのスクリプト表示に使用するための分かりやすい名前。指定がない場合は、代わりにスクリプトファイルを使用します。
descriptionスクリプトファイルの意図をより適切に説明する任意のテキスト
fileNameスクリプトファイルの名前。このプロパティーは 必須 であり、JAR 内のファイルにマップする必要があります。
6.4.3. スクリプト JAR のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
記述子とデプロイするスクリプトを含む JAR ファイルを作成したら、その JAR を Red Hat build of Keycloak の providers/ ディレクトリーにコピーして、bin/kc.[sh|bat] build を実行します。