Keycloak 22.0.0 リリース

2023年7月11日

リリースをダウンロードするには、Keycloak ダウンロード にアクセスしてください。

リリースノート

サーバーディストリビューション

Java 11 のサポートを削除

Keycloak サーバーを Java 11 で実行することはサポートされなくなりました。Java 11 は Keycloak 21 で非推奨となり、Keycloak 22 で削除される計画が発表されていました。

Quarkus 3.x にアップグレード

Keycloak は Quarkus Java フレームワークのバージョン 3.2.0.Final にアップグレードしました。Quarkus 3.x は、最新技術を迅速に取り入れ、最先端のユーザーエクスペリエンスを提供することで、Java 開発を推進するという伝統を継承しています。

Java EE から Jakarta EE への移行

Quarkus 3.x へのアップグレードの一環として、Keycloak はコードベースを Java EE (Enterprise Edition) から後継の Jakarta EE に移行しました。これにより、Keycloak にさまざまな変更がもたらされます。Jakarta EE 10 をサポートするために、すべての Jakarta EE 仕様をアップグレードしました。

JAX-RS リソースでコンテキストと依存性注入が有効でなくなる

より優れたランタイムを提供し、基盤となるスタックを最大限に活用するために、javax.ws.rs.core.Context アノテーションを使用したコンテキストデータのすべてのインジェクションポイントが削除されました。期待されるパフォーマンスの向上には、リクエストライフサイクル中にプロキシインスタンスを複数回作成しないこと、およびランタイム時のリフレクションコードの量を大幅に削減することが含まれます。

Hibernate ORM 6 にアップグレード

Keycloak は Hibernate ORM 6.2 へのアップグレードの恩恵を受けるようになりました。これには、パフォーマンスの向上、より優れた SQL、最新の JDK サポート、および最新の RDBMS 機能のサポートが含まれます。

Elytron クレデンシャルストアの置き換え

以前の、そして現在削除された WildFly ディストリビューションは、キーストアにバックアップされた Elytron クレデンシャルストアからシークレットを読み取る組み込みの Vault プロバイダーを提供していました。これが利用できなくなったため、Keycloak Vault SPI の新しい実装である Keycloak KeyStore Vault を追加しました。名前が示すように、この実装は Java キーストアファイルからシークレットを読み取ります。このようなシークレットは、管理コンソールの複数の場所で使用できます。詳細については、ガイド と最新の ドキュメント を参照してください。

KeyStore Config Source を追加

KeyStore Vault のニュースに関連して、Quarkus が最近リリースした KeyStore Config Source という機能も統合しました。これは、既存の設定ソース(CLI パラメーター、環境変数、ファイル)に加えて、Java キーストアファイルに保存された設定プロパティを介して Keycloak サーバーを設定できるようになったことを意味します。この機能の詳細については、設定ガイド を参照してください。

ホスト名デバッグツール

多くのユーザーがサーバーのホスト名の正しい設定に問題を抱えていたため、設定をデバッグするための新しいヘルパーツールが追加されました。

パススループロキシモードの変更

モード passthrough で Keycloak の --proxy 設定を使用するインストール環境は、このモードの動作が変更されたため、ドキュメントを確認する必要があります。

エクスポートとインポートが自動ビルドを実行

以前のリリースでは、export および import コマンドは、最初に build コマンドを実行する必要がありました。このリリース以降、export および import コマンドは、ビルド時の設定が変更された場合、Keycloak の自動リビルドを実行します。

管理コンソール

アカウントコンソール v1 の削除

古いアカウントコンソール (v1) は完全に削除されました。このバージョンのアカウントコンソールは、Keycloak 12 で非推奨とされていました。

アカウントコンソール v3 がプレビューに昇格

Keycloak のバージョン 21.1.0 で、新しいアカウントコンソール (バージョン 3) が実験的な機能として導入されました。このバージョンから、プレビュー機能に昇格しました。

アカウントコンソールテンプレート変数を削除

アカウントコンソール V2 および V3 テンプレートに公開されていた 2 つの変数 (isEventsEnabled および isTotpConfigured) は未使用のまま残されており、このリリースで削除されました。

開発者がアカウントコンソールのテーマを拡張した場合、これらの変数を使用している可能性があります。基本テーマを拡張する場合は、これらの変数が使用されていないことを確認してください。

カスタム管理コンソールメッセージの変更

管理コンソール(および間もなく新しいアカウントコンソールも)は、国際化されたメッセージのキーがどのように解析されるかに関して、Keycloak の他の部分とはわずかに異なる動作をします。これは、国際化に i18next ライブラリを使用しているためです。したがって、「レルム設定」➡「ローカライゼーション」の下で管理コンソール用のカスタムメッセージを定義する場合は、i18next のベストプラクティスを考慮に入れる必要があります。具体的には、管理コンソール用のメッセージを定義する際には、メッセージのキーに 名前空間 を指定することが重要です。

たとえば、新しいレルムが作成されたときにユーザーに表示される welcome メッセージを上書きしたいとしましょう。このメッセージは、メッセージを保持する元のファイルの名前 (dashboard.json) と同じ dashboard 名前空間にあります。このメッセージを上書きしたい場合は、名前空間をプレフィックスとして使用し、その後にコロンで区切られたメッセージのキーを使用する必要があります。この場合、dashboard:welcome になります。

JavaScript アダプター

レガシー Promise API を削除

このリリースで、Keycloak JS アダプターからレガシー Promise API メソッドを削除しました。これは、アダプターから返された Promise で .success() および .error() を呼び出すことができなくなったことを意味します。

new 演算子でインスタンス化する必要がある

以前のリリースでは、Keycloak JS アダプターが new 演算子なしで構築された場合に、非推奨警告を積極的にログに記録し始めました。このリリース以降、そうすると代わりに例外がスローされます。これは、JavaScript クラス の期待される動作に合わせるためであり、これにより、将来のアダプターのリファクタリングが容易になります。

Admin API

Admin ライブラリアーティファクトの名前を変更

Jakarta EE へのアップグレード後、Keycloak Admin クライアントのアーティファクトは、長期的な保守性を考慮して、より説明的な名前に変更されました。Jakarta EE をサポートするものと Java EE をサポートするものの、2 つの個別の Keycloak Admin クライアントを依然として提供しています。

カスタム属性に基づいたユーザー数のカウントのサポート

User API は、カスタム属性に基づいたユーザー数のクエリをサポートするようになりました。そのため、新しい q パラメーターが /{realm}/users/count エンドポイントに追加されました。

q パラメーターは、次の形式 q=<name>:<value> <name>:<value> を想定しています。ここで、<name><value> は、それぞれ属性名と値を表します。

Operator

k8s.keycloak.org/v2alpha1 の変更

keycloak がスケーラブルなリソースになるのを容易にするために、keycloak.status に追加のフィールドが追加されました。また、status をより解釈しやすくするための追加フィールド(observedGeneration、condition observedGeneration、lastTransitionTime フィールドなど)もあります。

condition status フィールドは、標準の Kubernetes conditions に準拠するために、boolean から string に変更されました。CRD では、一時的に任意の内容を受け入れるように表現されますが、常に string になります。このフィールドの使用箇所を、true または false ではなく、値 "True"、"False"、または "Unknown" を想定するように更新してください。

Operator リソースの共同管理

高度な管理が必要なシナリオでは、オペレーターによって直接設定されていないオペレーター管理リソースのほとんどのフィールドを直接更新できるようになりました。これは、Keycloak 仕様のサポートされていないスタンザの代替として使用できます。サポートされていないスタンザと同様に、これらの直接的な変更はサポート対象とは見なされません。変更によってオペレーターがリソースを管理できなくなった場合、Keycloak CR にこのエラー状態が表示され、オペレーターがログに記録します。

ID プロバイダー連携

OpenID Connect ID プロバイダーでの必須クレーム構成

OpenID Connect ID プロバイダーは、ID プロバイダーによって発行された ID トークンに特定のクレームが含まれている必要があることを指定する新しい構成をサポートしています。そうでない場合、ユーザーはこのブローカーを介して認証できません。

このオプションはデフォルトで無効になっています。有効にすると、フィルター処理する JWT トークンクレームの名前と、一致させる値を指定できます (正規表現形式をサポート)。

OpenID Connect プロバイダーでの JWE 暗号化 ID トークンと UserInfo レスポンスのサポート

OpenID Connect プロバイダーは、ID トークンと UserInfo レスポンスに対して Json Web Encryption (JWE) をサポートするようになりました。プロバイダーは、選択された暗号化アルゴリズムに対して定義されたレルムキーを使用して復号化を実行します。

ハードコードされたグループマッパー

新しいハードコードされたグループマッパーを使用すると、ID プロバイダーから連携されたユーザーに特定のグループを追加できます。

ユーザーセッションノートマッパー

新しいユーザーセッションノートマッパーを使用すると、クレームをユーザーセッションノートにマッピングできます。

LDAP フェデレーション

LDAPS のみのトラストストアオプションを削除

トラストストア SPI Only for ldaps を使用する LDAP オプションが削除されました。このパラメーターは、TLS で保護された LDAP 接続のトラストストアを選択するために使用されます。内部 Keycloak トラストストアが選択される (Always) か、グローバル JVM トラストストアが選択される (Never) かのいずれかです。

Only for ldaps が使用されていたデプロイメントは、TLS で保護された LDAP 接続に対して Always オプションが選択された場合と同様に自動的に動作します。

OpenShift 統合機能を削除

OpenShift 3.x の内部 IdP を Keycloak に置き換えることを可能にした openshift-integration プレビュー機能は、Keycloak コードベースから個別の拡張プロジェクトに移動されました。

アップグレード

アップグレードする前に、変更点の完全なリストについては、移行ガイド を参照してください。

解決済みのすべての課題

新機能

機能強化

バグ