2.9. Keycloak JS
このリリースには、Keycloak JS ライブラリーに対するいくつかの変更が含まれています。これらの変更の主な動機は、Red Hat build of Keycloak サーバーからライブラリーを切り離し、個別にリファクタリングできるようにすることです。これにより、コードを意味し、将来的に維持を容易にします。変更内容は以下のとおりです。
2.9.1. ライブラリーがサーバーから静的で提供されることはなくなりました。
Keycloak JS ライブラリーは、Red Hat build of Keycloak サーバーから静的で提供されることはなくなりました。これは、以下の URL が利用できなくなったことを意味します。
-
/js/keycloak-authz.js
-
/js/keycloak-authz.min.js
-
/js/keycloak.js
-
/js/keycloak.min.js
-
/js/{version}/keycloak-authz.js
-
/js/{version}/keycloak-authz.min.js
-
/js/{version}/keycloak.js
-
/js/{version}/keycloak.min.js
さらに、これらの URL のライブラリーにリンクした keycloakJsUrl
プロパティーが管理コンソールテーマから削除されました。カスタムテーマがこのプロパティーを使用してライブラリーを含めていた場合は、別の方法を使用してテーマを更新し、ライブラリーを組み込む必要があります。
NPM などのパッケージマネージャーを使用して、プロジェクトにライブラリーを追加する必要があります。ライブラリーは、NPM レジストリー では keycloak-js
として利用できます。これは、以下のコマンドを使用してインストールできます。
npm install keycloak-js
または、サーバーの配布に、keycloak-js-26.0.0.tgz
アーカイブにライブラリーのコピーが含まれます。そこからプロジェクトにライブラリーをコピーできます。ビルドせずにブラウザーでライブラリーを直接使用する場合は、ライブラリーを独自にホストする必要があります。パッケージマネージャーは、今後もライブラリーの更新を容易にするため、プロジェクトにライブラリーを含めるための推奨される方法です。
2.9.2. Keycloak
インスタンス設定が必要になりました。
以前は、設定を渡さずに Keycloak
インスタンスを作成することができました。設定は、含まれている keycloak.js
スクリプトのパスに基づいて、keycloak.json
ファイルからサーバーから自動的にロードされます。ライブラリーはサーバーから静的に提供されなくなったため、この機能は削除されました。Keycloak
インスタンスを構築する場合は、設定を明示的に渡す必要があります。
// Before const keycloak = new Keycloak(); // After const keycloak = new Keycloak({ url: "http://keycloak-server", realm: "my-realm", clientId: "my-app" }); // Alternatively, you can pass a URL to a `keycloak.json` file. // Note this is not reccomended as it creates additional network requests, and is prone to change in the future. const keycloak = new Keycloak('http://keycloak-server/path/to/keycloak.json');
2.9.3. ログインのメソッドが 非同期
になりました
Keycloak JS は、Web Crypto API を使用して、PKCE をサポートするために必要な SHA-256 ダイジェストを計算するようになりました。この API の非同期性質により、以下のパブリックメソッドが常に Promise
を返すようになりました。
- ログイン
-
createLoginUrl()
-
createRegisterUrl()
これらのメソッドを待機するようにコードを更新する ようにして
ください。
// Before keycloak.login(); const loginUrl = keycloak.createLoginUrl(); const registerUrl = keycloak.createRegisterUrl(); // After await keycloak.login(); const loginUrl = await keycloak.createLoginUrl(); const registerUrl = await keycloak.createRegisterUrl();
これらのメソッドを待つために、必ずコード を
更新してください。
2.9.4. ビルド時のオプションのより厳密な起動動作
提供されたビルド時のオプションが、最後に最適化された Red Hat build of Keycloak ビルド中にサーバーイメージに永続化された値とは異なる場合、Red Hat build of Keycloak は起動に失敗します。以前は、このような場合、警告メッセージが表示されていました。
2.9.5. 新しいデフォルトのクライアントスコープの 基本
basic
という名前の新しいクライアントスコープはレルムのデフォルトクライアントスコープとして追加されるため、新規に作成されるすべてのクライアントに追加されます。クライアントスコープは、移行時に既存のすべてのクライアントにも自動的に追加されます。
このスコープには、次の要求の事前設定されたプロトコルマッパーが含まれます。
-
sub
(専用セクションで詳細を参照してください) -
auth_time
これにより、軽量アクセストークンの要求数を減らすためにさらに役立ちますが、常に自動的に追加された要求を設定することができます。
2.9.5.1. サブ
要求はプロトコルマッパー経由でアクセストークンに追加されます。
アクセストークンに常に追加された sub
要求は、デフォルトで追加されるようになりましたが、新しい Subject (sub)
プロトコルマッパーが使用されます。
Subject (sub)
マッパーは、基本
クライアントスコープでデフォルトで設定されます。したがって、このバージョンにアップグレードした後に追加の設定は必要ありません。
Pairwise サブジェクト識別子
マッパーを使用してアクセストークンのサブ要求をマップする場合は、Subject (
マッパーを無効にするか削除することを検討できます。ただし、sub
)Pairwise サブジェクト識別子マッパーの前に
値は サブジェクト(サブ)
プロトコルマッパーが実行されるため、pairwise
Subject (sub)
マッパーによって追加された値をオーバーライドします。これは、現在 Subject (sub)
マッパーが最初のプロトコルマッパーとして実行されているため、sub
要求をオーバーライドする他のカスタムプロトコルマッパーの実装にも適用されます。
Subject (sub)
マッパーを使用して、アクセストークン、軽量アクセストークン、およびイントロスペクション応答に対してのみ サブ
要求を設定できます。idToken および Userinfo には、常に サブ
要求が含まれます。
ユーザーセッションが存在しないため、マッパーはサービスアカウントに影響を与えません。また、sub
要求はアクセストークンに常に追加されます。
2.9.5.2. nonce 要求は ID トークンにのみ追加されます。
nonce 要求は、OpenID Connect Core 1.0 仕様に厳密に続いて ID トークンにのみ追加されるようになりました。仕様で示されているように、同じパラメーターが認可要求で送信された場合、要求は ID トークン 内に必須になります。また、この仕様では、リフレッシュ要求後に nonce
を追加しないようにすることを推奨します。以前のバージョンでは、要求はすべての応答(更新に含まれる)のすべてのトークン(アクセス、リフレッシュ、および ID)に設定されていました。
新しい Nonce 後方互換性
マッパーは、クライアントスコープに割り当てて古い動作に戻すことができるソフトウェアにも含まれています。たとえば、JS アダプターは、バージョン 2.0.0 で #26651 を発行する前に、すべてのトークンで返された nonce
要求をチェックしました。したがって、古いバージョンの JS アダプターが使用される場合、クライアントスコープを使用してマッパーを必要なクライアントに追加する必要があります。
2.9.5.3. 古い javascript アダプターの使用
アプリケーションで古いバージョンの javascript アダプターで最新の Red Hat build of Keycloak サーバーを使用する場合は、以前のバージョンの javascript アダプターが Red Hat build of Keycloak によって追加された要求に依存するが、OIDC 仕様ではサポートされていない要求に依存するため、上記のトークンの変更の影響を受ける場合があります。ここでは、以下の点を説明します。
-
Red Hat build of Keycloak Javascript アダプター 24.0.3 以前を使用している場合の
セッション状態(session_state)
マッパーの追加 -
Red Hat build of Keycloak 24 より古い Red Hat build of Keycloak Javascript アダプターを使用する場合の
Nonce 後方互換性
マッパーの追加
プロトコルマッパーは、対応するクライアントまたは一部のクライアントスコープに直接追加できます。これは、古いバージョンの Red Hat build of Keycloak Javascript アダプターに依存するクライアントアプリケーションで使用できます。詳細は、前項の session_state
および nonce
要求専用のものです。