Keycloak 26.0.0 リリース

2024年10月04日

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

ハイライト

組織のサポート

Keycloak 26 から、組織機能が完全にサポートされました。

クライアントライブラリのアップデート

クライアントライブラリ専用のリリースサイクル

今回のリリースから、Keycloak クライアントライブラリの一部は、Keycloak サーバーのリリースサイクルとは独立したリリースサイクルを持つようになります。26.0.0 リリースは、クライアントライブラリが Keycloak サーバーと一緒にリリースされる最後のリリースとなる可能性があります。今後は、クライアントライブラリは Keycloak サーバーとは異なるタイミングでリリースされる可能性があります。

クライアントライブラリは以下のアーティファクトです

  • Java admin client - Maven アーティファクト org.keycloak:keycloak-admin-client

  • Java authorization client - Maven アーティファクト org.keycloak:keycloak-authz-client

  • Java policy enforcer - Maven アーティファクト org.keycloak:keycloak-policy-enforcer

将来的には、さらに多くのライブラリが含まれる可能性があります。

クライアントライブラリは Java 8 でサポートされているため、古いアプリケーションサーバーにデプロイされたクライアントアプリケーションでも使用できます。

クライアントライブラリとサーバーの互換性

今回のリリースから、同じサーバーバージョンと、いくつかの以前のメジャーサーバーバージョンとのクライアントライブラリのテストとサポートを開始します。

サーバーバージョンとクライアントライブラリのサポート対象バージョンに関する詳細については、アップグレードガイドを参照してください。

デフォルトで永続化されるユーザーセッション

Keycloak 25 では、persistent-user-sessions 機能が導入されました。この機能が有効になっている場合、以前の動作(オフラインセッションのみが永続化されていた)とは対照的に、すべてのユーザーセッションがデータベースに永続化されます。Keycloak 26 では、この機能がデフォルトで有効になっています。これは、すべてのユーザーセッションがデフォルトでデータベースに永続化されることを意味します。

この動作を以前の状態に戻すには、この機能を無効にすることができます。詳細については、分散キャッシュの設定ガイドの「揮発性ユーザーセッション」セクションを参照してください。

アップグレード方法の詳細については、アップグレードガイドを参照してください。

新しいデフォルトのログインテーマ

keycloak ログインテーマの新しいバージョン (v2) が登場しました。これにより、ユーザー設定に基づいて自動的にダークテーマに切り替えるサポートなど、ルックアンドフィールが向上しました。

以前のバージョン (v1) は非推奨となり、将来のリリースで削除される予定です。

すべての新しいレルムでは、keycloak.v2 がデフォルトのログインテーマになります。また、ログインテーマを明示的に設定したことがない既存のレルムも keycloak.v2 に切り替えられます。

高可用性マルチサイトデプロイメント

Keycloak 26 では、推奨される HA マルチサイトアーキテクチャに大幅な改善が加えられました。最も注目すべき点は次のとおりです。

  • Keycloak デプロイメントは、両方のサイトで同時にユーザーリクエストを処理できるようになりました。

  • サイト間の接続のアクティブ監視が、障害発生時のサイト間のレプリケーションを更新するために必要になりました。

  • ロードバランサーのブループリントは、クライアントによる DNS キャッシュによって引き起こされるフェイルオーバー時間の長期化を回避するために、AWS Global Accelerator を使用するように更新されました。

  • 永続的なユーザーセッションがアーキテクチャの要件になりました。その結果、ユーザーセッションは Keycloak または Infinispan のアップグレード後も保持されます。

移行方法の詳細については、アップグレードガイドを参照してください。

管理者ブートストラップとリカバリ

過去には、すべての管理者ユーザーがロックアウトされた場合に Keycloak インスタンスへのアクセスを取り戻すことは、困難で複雑なプロセスでした。これらの課題を認識し、ユーザーエクスペリエンスを大幅に向上させることを目指して、Keycloak は一時的な管理者アカウントをブートストラップし、失われた管理者アクセスを回復するためのいくつかの簡単な方法を提供するようになりました。

一時的な管理者アカウントを作成するために、特定のオプションを指定して start または start-dev コマンドを実行できるようになりました。さらに、ユーザーが手間をかけずに管理者アクセスを取り戻すことができる新しい専用コマンドが導入されました。

詳細な手順とこのトピックに関する詳細については、管理者ブートストラップとリカバリガイドを参照してください。

OpenTelemetry Tracing プレビュー

基盤となる Quarkus の OpenTelemetry Tracing のサポートが Keycloak に公開され、可観測性を向上させるためのアプリケーション追跡を取得できるようになりました。パフォーマンスのボトルネックを見つけ、アプリケーション障害の原因を特定し、分散システムを介したリクエストを追跡するのに役立ちます。このサポートはプレビューモードであり、フィードバックをお待ちしております。

詳細については、トレーシングの有効化ガイドを参照してください。

OpenID for Verifiable Credential Issuance

OpenID for Verifiable Credential Issuance (OID4VCI) は Keycloak ではまだ実験的な機能ですが、今回のリリースで大幅に改善されました。Keycloak OAuth SIG で、重要な開発と議論を見つけることができます。Keycloak コミュニティのどなたでも参加を歓迎します。

この機能の開発と議論にご参加いただいた OAuth SIG グループのすべてのメンバーに感謝します。特に、Francis PouatchaPascal KnüppelTakashi NorimatsuIngrid KamgaStefan WiedemannThomas Darimont に感謝します。

DPoP の改善

DPoP (OAuth 2.0 Demonstrating Proof-of-Possession) プレビュー機能が改善されました。DPoP はすべてのグラントタイプでサポートされるようになりました。以前のリリースでは、この機能は authorization_code グラントタイプでのみサポートされていました。UserInfo エンドポイントでの DPoP トークンタイプもサポートされています。

Pascal Knüppel 氏の貢献に感謝します。

GELF ロギングハンドラーの削除

GELF サポートはしばらくの間非推奨となっていましたが、今回のリリースで Keycloak から完全に削除されました。GELF の代替として使用できる、完全にサポートされている他のログハンドラー(Syslog など)が利用可能です。詳細については、ロギングガイドを参照してください。

Admin REST API 用の軽量アクセストークン

軽量アクセストークンを Admin REST API で使用できるようになりました。security-admin-console および admin-cli クライアントは、デフォルトで軽量アクセストークンを使用するようになり、「常に軽量アクセストークンを使用」と「フルスコープ許可」がこれら 2 つのクライアントで有効になりました。ただし、管理コンソールの動作は事実上同じままです。これら 2 つのクライアントに変更を加えた場合や、他の目的で使用している場合は注意してください。

Keycloak JavaScript アダプターがスタンドアロンに

Keycloak JavaScript アダプターはスタンドアロンライブラリになり、Keycloak サーバーから静的に提供されなくなりました。目標は、ライブラリを Keycloak サーバーから分離し、独立してリファクタリングできるようにすることで、コードを簡素化し、将来のメンテナンスを容易にすることです。さらに、ライブラリはサードパーティの依存関係がなくなり、さまざまな環境でより軽量かつ簡単に使用できるようになりました。

変更点の完全な内訳については、アップグレードガイドを参照してください。

Hostname v1 機能の削除

非推奨の hostname v1 機能が削除されました。この機能は Keycloak 25 で非推奨となり、hostname v2 に置き換えられました。この機能をまだ使用している場合は、hostname v2 に移行する必要があります。詳細については、ホスト名 (v2) の設定最初の移行ガイドを参照してください。

ルートから相対パスへの自動リダイレクト

http-relative-path プロパティが指定されている場合、ユーザーは Keycloak がホストされているパスに自動的にリダイレクトされます。つまり、相対パスが /auth に設定されていて、ユーザーが localhost:8080/ にアクセスすると、ページは localhost:8080/auth にリダイレクトされます。

http-management-relative-path または http-relative-path プロパティが指定されている場合、管理インターフェースにも同じことが当てはまります。

ユーザーが URL に相対パスを明示的に設定する必要がなくなるため、ユーザーエクスペリエンスが向上します。

再起動をまたいで失効したアクセストークンを永続化

今回のリリースでは、組み込みキャッシュを使用する場合、失効したアクセストークンはデータベースに書き込まれ、クラスターが再起動されるとデフォルトでリロードされます。

移行方法の詳細については、アップグレードガイドを参照してください。

クライアントポリシーのクライアント属性条件

クライアント属性に基づく条件がクライアントポリシーに追加されました。条件を使用して、指定されたクライアント属性を持ち、指定された値を持つクライアントを指定できます。クライアントポリシーのドキュメントで説明されているように、この条件を評価する際に AND または OR 条件のいずれかを使用できます。

Yoshiyuki Tabata 氏の貢献に感謝します。

ログハンドラーごとに異なるログレベルを指定

consolefilesyslog など、利用可能なすべてのログハンドラーに対してログレベルを指定できます。よりきめ細かいアプローチにより、アプリケーション全体のロギングを制御し、ニーズに合わせて調整できます。

詳細については、ロギングガイドを参照してください。

プロキシオプションの削除

非推奨の proxy オプションが削除されました。このオプションは Keycloak 24 で非推奨となり、必要に応じてホスト名オプションと組み合わせて proxy-headers オプションに置き換えられました。詳細については、リバースプロキシの使用最初の移行ガイドを参照してください。

オプション proxy-trusted-addresses の追加

proxy-headers オプションが設定されている場合、proxy-trusted-addresses を使用して、信頼できるプロキシアドレスの許可リストを指定できます。特定のリクエストのプロキシアドレスが信頼されていない場合、それぞれのプロキシヘッダー値は使用されません。

オプション proxy-protocol-enabled の追加

proxy-protocol-enabled オプションは、プロキシの背後からリクエストを処理するときに、サーバーが HA PROXY プロトコルを使用するかどうかを制御します。true に設定すると、返されるリモートアドレスは、実際に接続しているクライアントからのアドレスになります。

信頼およびキーマテリアルをリロードするオプションの追加

https-certificates-reload-period オプションを設定して、https-* オプションで参照されるキーストア、トラストストア、および証明書ファイルのリロード期間を定義できます。リロードを無効にするには -1 を使用します。デフォルトは 1 時間 (1h) です。

キャッシュの最大カウントを設定するオプションの追加

--cache-embedded-${CACHE_NAME}-max-count= を設定して、指定されたキャッシュ内のキャッシュエントリ数の上限を定義できます。

https-trust-store-* オプションの非推奨の解除

コミュニティからのフィードバックに基づいて、信頼できる証明書の粒度を向上させるために、https-trust-store-* オプションの非推奨を解除することにしました。

java-keystore キープロバイダーがより多くのアルゴリズムと Vault シークレットをサポート

レルムキーを外部 Java キーストアファイルからロードできる java-keystore キープロバイダーが変更され、すべての Keycloak アルゴリズムを管理できるようになりました。さらに、ストアから実際のキーを取得するために必要なキーストアとキーシークレットは、Vault を使用して設定できます。したがって、Keycloak レルムは、機密データをデータベースに保存せずに、任意のキーを暗号化されたファイルに外部化できます。

この件の詳細については、レルムキーの設定を参照してください。

ECDH-ES 暗号化キー管理アルゴリズムのサポートの追加

Keycloak は、クライアントの暗号化キー管理アルゴリズムとして、ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW、または ECDH-ES+A256KW の設定を許可するようになりました。Elliptic Curve Diffie-Hellman Ephemeral Static (ECDH-ES) を使用したキー合意仕様では、JWT に 3 つの新しいヘッダーパラメーター (epkapu、および apv) が導入されています。現在、Keycloak 実装は必須の epk のみを管理し、他の 2 つ (オプション) はヘッダーに追加されません。これらのアルゴリズムの詳細については、JSON Web Algorithms (JWA) を参照してください。

また、新しいキープロバイダーである ecdh-generated がレルムキーを生成するために利用可能になり、Java KeyStore プロバイダーに ECDH アルゴリズムのサポートが追加されました。

Justin Tay 氏の貢献に感謝します。

レルム内のソーシャルブローカーの複数インスタンスのサポート

レルム内に同じソーシャルブローカーの複数のインスタンスを持つことができるようになりました。

ほとんどの場合、レルムは同じソーシャルブローカーの複数のインスタンスを必要としません。ただし、organization 機能の導入により、同じソーシャルブローカーの異なるインスタンスを異なる組織にリンクできる必要があります。

ソーシャルブローカーを作成するときは、他のブローカーと同様に、エイリアスとオプションで 表示名 を指定する必要があります。

クレデンシャルの新しい汎用イベントタイプ

クレデンシャルの更新 (UPDATE_CREDENTIAL) および削除 (REMOVE_CREDENTIAL) のための汎用イベントが追加されました。クレデンシャルのタイプは、イベントの credential_type 属性で記述されています。新しいイベントタイプは、Email Event Listener でサポートされています。

次のイベントタイプは非推奨となり、将来のバージョンで削除される予定です: UPDATE_PASSWORDUPDATE_PASSWORD_ERRORUPDATE_TOTPUPDATE_TOTP_ERRORREMOVE_TOTPREMOVE_TOTP_ERROR

base/login および keycloak.v2/login テーマの template.ftl ファイルで、ログインボックスのフッターをカスタマイズできるようになりました。これは、一般的なリンクを表示したり、ページ末尾にカスタムスクリプトを含めたりするために使用できます。

新しい footer.ftl テンプレートは、「ログインボックス」の下部にレンダリングされる content マクロを提供します。

Keycloak CR が標準のスケジューリングオプションをサポート

Keycloak CR は、Keycloak Pod のスケジューリングを制御するためのファーストクラスプロパティを公開するようになりました。

詳細については、Operator Advanced Configuration を参照してください。

KeycloakRealmImport CR がプレースホルダーの置換をサポート

KeycloakRealmImport CR は、インポート時のプレースホルダー置換用の環境変数を作成するために spec.placeholders を公開するようになりました。

詳細については、Operator Realm Import を参照してください。

LDAP 接続プールの設定

今回のリリースでは、LDAP 接続プールの設定はシステムプロパティのみに依存します。

詳細については、接続プールの設定を参照してください。

Infinispan マーシャリングが Infinispan Protostream に変更

マーシャリングは、Java オブジェクトをバイトに変換して Keycloak サーバー間でネットワーク経由で送信するプロセスです。Keycloak 26 では、マーシャリング形式を JBoss マーシャリングから Infinispan Protostream に変更しました。

警告
JBoss マーシャリングと Infinispan Protostream は互換性がなく、誤った使用法はデータ損失につながる可能性があります。その結果、このバージョンへのアップグレード時にすべてのキャッシュがクリアされます。

Infinispan Protostream は Protocol Buffers (proto 3) に基づいており、下位/上位互換性があるという利点があります。

OSGi メタデータの削除

OSGi メタデータを使用していた Java アダプターがすべて削除されたため、JAR の OSGi メタデータの生成を停止しました。

グループのスケーラビリティを向上させることを目的として、レルムを削除するときにグループがデータベースから直接削除されるようになりました。その結果、レルムを削除するときに GroupRemovedEvent などのグループ関連のイベントが発行されなくなりました。

移行方法の詳細については、アップグレードガイドを参照してください。

レルム表現から ID プロバイダーが利用できなくなった

多くの ID プロバイダーを持つレルムと組織のスケーラビリティに関する改善の一環として、レルム表現は ID プロバイダーのリストを保持しなくなりました。ただし、レルムをエクスポートするときは、レルム表現から引き続き利用できます。

移行方法の詳細については、アップグレードガイドを参照してください。

アプリケーションのセキュリティ保護に関するドキュメントをガイド形式に変換

アプリケーションとサービスのセキュリティ保護ドキュメントは、以前のリリースで変換されたサーバーのインストールと設定ドキュメントと同様の新しい形式に変換されました。ドキュメントは、Keycloak ガイドで入手できるようになりました。

レガシークッキーの削除

Keycloak は、クッキーの SameSite フラグをサポートしていない古いブラウザーの回避策として導入された _LEGACY クッキーを送信しなくなりました。

_LEGACY クッキーには、安全でないコンテキストからのログインを許可するという別の目的もありました。これは Keycloak の本番環境へのデプロイではまったく推奨されませんが、localhost 外で http 経由で Keycloak にアクセスすることはかなり頻繁に行われます。_LEGACY クッキーの代替として、Keycloak は安全でないコンテキストが使用されていることを検出すると、secure フラグを設定せず、SameSite=None の代わりに SameSite=Lax を設定するようになりました。

UserRepresentation のプロパティ origin は非推奨

UserRepresentationorigin プロパティは非推奨となり、将来のリリースで削除される予定です。

代わりに、ユーザーがリンクされているプロバイダーを取得するには、federationLink プロパティを使用することを推奨します。

アップグレード

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

解決済みのすべての問題

非推奨の機能

新機能

機能強化

バグ