検索

6.4. JavaScript プロバイダー

download PDF
注記

DPoP は テクノロジープレビュー であり、完全にはサポートされていません。デフォルトでは無効になっています。

有効にするには、--features=preview または --features=dpop を使用してサーバーを起動します。

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
現在の UserModeluser を使用できるのは、別のオーセンティケーターがユーザーアイデンティティーの確立に成功し、ユーザーを認証セッションに設定した後にトリガーされるように、スクリプトオーセンティケーターが認証フロー内で設定されている場合です。
session
アクティブな KeycloakSession
authenticationSession
現在の AuthenticationSessionModel
httpRequest
the current org.jboss.resteasy.spi.HttpRequest
LOG
ScriptBasedAuthenticator にスコープ指定された org.jboss.logging.Logger
注記

authenticate(context) action(context) 関数に渡される context 引数から追加のコンテキスト情報を抽出できます。

AuthenticationFlowError = Java.type("org.keycloak.authentication.AuthenticationFlowError");

function authenticate(context) {

  LOG.info(script.name + " --> trace auth for: " + user.username);

  if (   user.username === "tester"
      && user.getAttribute("someAttribute")
      && user.getAttribute("someAttribute").contains("someValue")) {

      context.failure(AuthenticationFlowError.INVALID_USER);
      return;
  }

  context.success();
}

6.4.1.1. スクリプトオーセンティケーターを追加する場所

スクリプトオーセンティケーターの使用方法としては、認証の最後にいくつかのチェックを実行することが考えられます。スクリプトオーセンティケーターを (たとえば、アイデンティティー Cookie による SSO 再認証中であっても) 常にトリガーする場合、認証フローの最後にスクリプトオーセンティケーターを REQUIRED として追加し、既存のスクリプトオーセンティケーターを別の REQUIRED の認証サブフローにカプセル化する必要がある場合があります。これが必要なのは、REQUIRED と ALTERNATIVE の実行を同じレベルにすることができないためです。たとえば、認証フロー設定は次のようになります。

- User-authentication-subflow REQUIRED
-- Cookie ALTERNATIVE
-- Identity-provider-redirect ALTERNATIVE
...
- Your-Script-Authenticator REQUIRED

6.4.2. OpenID Connect Protocol Mapper

OpenID Connect Protocol Mapper スクリプトは、ID トークンやアクセストークンの内容を変更できる JavaScript スクリプトです。

コード内で javax.script.Bindings スクリプトを使用できます。

user
現在の UserModel
realm
RealmModel
token
現在の IDToken。ID トークン用にマッパーが設定されている場合にのみ使用できます。
tokenResponse
現在の AccessTokenResponse。アクセストークン用にマッパーが設定されている場合にのみ使用できます。
userSession
アクティブな UserSessionModel
keycloakSession
アクティブな KeycloakSession

スクリプトのエクスポートが、トークンクレームの値として使用されます。

// prints can be used to log information for debug purpose.
print("STARTING CUSTOM MAPPER");

var inputRequest = keycloakSession.getContext().getHttpRequest();
var params = inputRequest.getDecodedFormParameters();
var output = params.getFirst("user_input");
exports = output;

上記のスクリプトを使用すると、認証リクエストから user_input を取得できます。これは、マッパーで設定された Token Claim Name にマッピングするために使用できます。

6.4.3. スクリプトで 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 は、デプロイするスクリプトに関するメタデータ情報を提供するファイル記述子です。これは、次の構造が含まれる JSON ファイルです。

{
    "authenticators": [
        {
            "name": "My Authenticator",
            "fileName": "my-script-authenticator.js",
            "description": "My Authenticator from a JS file"
        }
    ],
    "policies": [
        {
            "name": "My Policy",
            "fileName": "my-script-policy.js",
            "description": "My Policy from a JS file"
        }
    ],
    "mappers": [
        {
            "name": "My Mapper",
            "fileName": "my-script-mapper.js",
            "description": "My Mapper from a JS file"
        }
    ],
    "saml-mappers": [
        {
            "name": "My Mapper",
            "fileName": "my-script-mapper.js",
            "description": "My Mapper from a JS file"
        }
    ]
}

このファイルは、デプロイする別のタイプのスクリプトプロバイダーを参照する必要があります。

  • authenticators

    OpenID Connect Script Authenticator 用。同じ JAR ファイルに 1 つまたは複数のオーセンティケーターを設定できます。

  • policies

    Red Hat build of Keycloak Authorization Services を使用する場合の JavaScript ポリシー用。同じ JAR ファイルに 1 つまたは複数のポリシーを設定できます。

  • mappers

    OpenID Connect Script Protocol Mapper 用。同じ JAR ファイルに 1 つまたは複数のマッパーを設定できます。

  • saml-mappers

    SAML Script Protocol Mapper 用。同じ JAR ファイルに 1 つまたは複数のマッパーを設定できます。

JAR ファイルのスクリプトファイルごとに、スクリプトファイルを特定のプロバイダータイプにマッピングする META-INF/keycloak-scripts.json に対応するエントリーが必要です。そのためには、各エントリーに以下のプロパティーを指定する必要があります。

  • name

    Red Hat build of Keycloak 管理コンソールでのスクリプト表示に使用するための分かりやすい名前。指定がない場合は、代わりにスクリプトファイルを使用します。

  • description

    スクリプトファイルの意図をより適切に説明する任意のテキスト

  • fileName

    スクリプトファイルの名前。このプロパティーは 必須 であり、JAR 内のファイルにマップする必要があります。

6.4.4. スクリプト JAR のデプロイ

記述子とデプロイするスクリプトを含む JAR ファイルを作成したら、その JAR を Red Hat build of Keycloak の providers/ ディレクトリーにコピーして、bin/kc.[sh|bat] build を実行します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.