Keycloak 25.0.0 リリース

2024年6月10日

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

ハイライト

アカウントコンソール v2 テーマの削除

アカウントコンソール v2 テーマが Keycloak から削除されました。このテーマは Keycloak 24 で非推奨となり、アカウントコンソール v3 テーマに置き換えられました。このテーマをまだ使用している場合は、アカウントコンソール v3 テーマに移行する必要があります。

Java 21 のサポート

Keycloak は最新の LTS OpenJDK バージョンに追従するため、OpenJDK 21 をサポートするようになりました。

Java 17 のサポートは非推奨

OpenJDK 17 のサポートは Keycloak では非推奨となり、今後のリリースで OpenJDK 21 のサポートに移行するため削除されます。

ほとんどの Java アダプターを削除

以前の Keycloak バージョンのリリースノートで述べたように、ほとんどの Java アダプターが Keycloak コードベースおよびダウンロードページから削除されました。

OAuth 2.0/OIDC の場合、これには Tomcat アダプター、WildFly/EAP アダプター、サーブレットフィルターアダプター、KeycloakInstalled デスクトップアダプター、jaxrs-oauth-client アダプター、JAAS ログインモジュール、Spring アダプター、SpringBoot アダプターの削除が含まれます。いくつかの代替案のリストについては、以前の投稿を確認してください。

SAML の場合、これには Tomcat アダプターとサーブレットフィルターアダプターの削除が含まれます。SAML アダプターは、WildFly および JBoss EAP で引き続きサポートされています。

汎用的な Authorization Client ライブラリは引き続きサポートされており、今後もサポートする予定です。これは、他の OAuth 2.0 または OpenID Connect ライブラリと組み合わせて使用​​することを目的としています。この認可クライアントライブラリが Elytron OIDC や SpringBoot などのサードパーティ Java アダプターとともに使用されている例については、クイックスタートを確認してください。WildFly で使用されている SAML アダプターの例についても、クイックスタートを確認できます。

PatternFly 5 へのアップグレード

Keycloak 24 では、ウェルカムページが PatternFly 5 (Keycloak のユーザーインターフェースを支える最新のデザインシステム) を使用するように更新されました。このリリースでは、管理コンソールとアカウントコンソールも PatternFly 5 を使用するように更新されました。管理コンソールとアカウントコンソールを拡張およびカスタマイズする場合は、PatternFly 5 の変更点を確認し、それに応じてカスタマイズを更新してください。

Argon2 パスワードハッシュ

Argon2 は、FIPS 環境以外で Keycloak が使用するデフォルトのパスワードハッシュアルゴリズムになりました。

Argon2 は、2015 年のパスワードハッシュコンペティションの勝者であり、OWASP によって推奨されるハッシュアルゴリズムです。

Keycloak 24 では、PBKDF2 のデフォルトのハッシュ反復回数が 27.5K から 210K に増加し、パスワードハッシュの生成に必要な CPU 時間が 10 倍以上増加しました。Argon2 を使用すると、以前の Keycloak リリースとほぼ同じ CPU 時間で、より優れたセキュリティを実現できます。1 つの欠点は、Argon2 が GPU 攻撃に対する耐性を高めるために、より多くのメモリを必要とすることです。Keycloak の Argon2 のデフォルトでは、ハッシュリクエストごとに 7MB が必要です。過剰なメモリと CPU 使用量を防ぐため、Argon2 によるハッシュの並列計算は、デフォルトで JVM で利用可能なコア数に制限されています。Argon2 のメモリ集約的な性質をサポートするために、デフォルトの GC を ParallelGC から G1GC に更新し、ヒープの使用率を向上させました。

新しいホスト名オプション

以前のホスト名構成設定で経験した複雑さと直感性の欠如に対応して、Hostname v2 オプションを導入できることを誇りに思います。

皆様からのフィードバックに耳を傾け、厄介な問題に取り組み、ホスト名構成の管理をよりスムーズに行えるようにしました。これらのオプションの背後にある動作も変更されており、注意が必要です。カスタムホスト名設定を扱っている場合は特に注意してください。

Hostname v2 オプションはデフォルトでサポートされています。古いホスト名オプションは非推奨となり、今後のリリースで削除される予定です。できるだけ早く移行する必要があります。

新しいオプションはデフォルトで有効になっているため、Keycloak は古いオプションを認識しません。

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

永続的なユーザーセッション

以前のバージョンの Keycloak では、オフラインユーザーセッションとオフラインクライアントセッションのみがデータベースに保存されていました。新機能の persistent-user-session は、オンラインユーザーセッションとオンラインクライアントセッションをメモリだけでなくデータベースにも保存します。これにより、Keycloak のすべてのインスタンスが再起動またはアップグレードされた場合でも、ユーザーはログイン状態を維持できます。

この機能はプレビュー機能であり、デフォルトでは無効になっています。使用するには、ビルドコマンドに以下を追加してください

bin/kc.sh build --features=persistent-user-session ...

詳細については、機能の有効化と無効化ガイドを参照してください。サイジングガイドには、この機能が有効になっている場合の更新されたリソース要件を説明する新しい段落が含まれています。

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

Cookie の更新

すべての Cookie に SameSite 属性を設定

以下の Cookie は、SameSite 属性を設定していませんでした。最近のブラウザバージョンでは、デフォルトで SameSite=Lax になります。

  • KC_STATE_CHECKERSameSite=Strict を設定するようになりました

  • KC_RESTARTSameSite=None を設定するようになりました

  • KEYCLOAK_LOCALESameSite=None を設定するようになりました

  • KEYCLOAK_REMEMBER_MESameSite=None を設定するようになりました

デフォルト値 SameSite=Lax は、POST ベースのバインディング (主に SAML に適用されますが、一部の OpenID Connect / OAuth 2.0 フローでも使用されます) で問題を引き起こします。

Cookie KC_AUTH_STATE は削除され、Keycloak サーバーはもはやこの Cookie を必要としなくなったため、設定されなくなりました。

カスタム Cookie を設定するための以下の API が削除されました

  • ServerCookie - NewCookie.Builder に置き換えられました

  • LocaleSelectorProvider.KEYCLOAK_LOCALE - CookieType.LOCALE に置き換えられました

  • HttpCookie - NewCookie.Builder に置き換えられました

  • HttpResponse.setCookieIfAbsent(HttpCookie cookie) - HttpResponse.setCookieIfAbsent(NewCookie cookie) に置き換えられました

期限切れの認証セッションに対する「すでにログインしています」の問題に対処

Keycloak 23 リリースでは、ユーザーが複数のブラウザタブで並行して認証されている場合の改善が提供されました。ただし、この改善では、認証セッションが期限切れになった場合は対処されていませんでした。ユーザーがすでに 1 つのブラウザタブにログインしていて、別のブラウザタブで認証セッションが期限切れになった場合、Keycloak は OIDC/SAML エラーでクライアントアプリケーションにリダイレクトできるようになりました。これにより、クライアントアプリケーションは認証をすぐに再試行できます。これは通常、SSO セッションのためにアプリケーションに自動的にログインする必要があります。詳細については、サーバー管理ガイドの認証セッションを参照してください。

さらに軽量化されたライトウェイトアクセストークン

以前のリリースでは、ライトウェイトアクセストークンのサポートが追加されました。このリリースでは、ライトウェイトアクセストークンからさらに多くの組み込みクレームを削除することに成功しました。クレームはプロトコルマッパーによって追加されます。それらのいくつかは、OIDC 仕様で厳密に要求されていなかったため、通常のアクセストークンまたは ID トークンにも影響を与えます。

  • クレーム sub および auth_time は、プロトコルマッパーによって追加されるようになりました。これらは、すべてのクライアントに自動的に追加される新しいクライアントスコープ basic でデフォルトで構成されています。クレームは、以前と同様に ID トークンとアクセストークンに追加されますが、ライトウェイトアクセストークンには追加されません。

  • クレーム nonce は、ID トークンにのみ追加されるようになりました。通常のアクセストークンまたはライトウェイトアクセストークンには追加されません。下位互換性のため、明示的に構成する必要があるプロトコルマッパーによって、このクレームをアクセストークンに追加できます。

  • クレーム session_state は、どのトークンにも追加されなくなりました。必要に応じて、プロトコルマッパーによって追加することは引き続き可能です。仕様でサポートされている他の専用クレーム sid が引き続き存在し、以前のバージョンでも利用可能であり、まったく同じ値を持っています。

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

トークンイントロスペクションエンドポイントでの application/jwt メディアタイプのサポート

トークンイントロスペクションエンドポイントを呼び出すときに、HTTP ヘッダー Accept: application/jwt を使用できます。特定のクライアントで有効にすると、トークンイントロスペクションエンドポイントからクレーム jwt が完全な JWT アクセストークンとともに返されます。これは、特にイントロスペクションエンドポイントを呼び出すクライアントがライトウェイトアクセストークンを使用したユースケースに役立ちます。貢献してくれた Thomas Darimont に感謝します。

パスワードにユーザー名が含まれているかどうかの確認のためのパスワードポリシー

Keycloak は、ユーザーパスワードにユーザー名が含まれている場合に拒否できる新しいパスワードポリシーをサポートしています。

必須アクションの改善

管理コンソールで、特定のレルムの [必須アクション] タブで、いくつかの必須アクションを構成できるようになりました。現在、[パスワードの更新] は唯一の組み込みの構成可能な必須アクションです。これは、再認証なしで kc_action パラメーター (アカウントコンソールでパスワードを更新するときなどに使用) によってユーザーがパスワードを更新できる最大時間である [認証の最大経過時間] の設定をサポートしています。必須アクションのソートも改善されました。認証中に複数の必須アクションがある場合、認証中に設定されたアクション (たとえば、kc_action パラメーターによる) か、管理者によってユーザーアカウントに手動で追加されたアクションかにかかわらず、すべてのアクションがまとめてソートされます。貢献してくれた Thomas DarimontDaniel Fesenmeyer に感謝します。

パスキーの改善

パスキー条件付き UI のサポートが追加されました。パスキープレビュー機能が有効になっている場合、専用の認証機能が利用可能になり、利用可能なパスキーアカウントのリストから選択し、それに基づいてユーザーを認証できることを意味します。貢献してくれた Takashi Norimatsu に感謝します。

SAML のデフォルトクライアントプロファイル

セキュリティで保護された SAML クライアントを持つためのデフォルトクライアントプロファイルが追加されました。管理コンソールでレルムのクライアントポリシーを参照すると、新しいクライアントプロファイル saml-security-profile が表示されます。これを使用すると、署名が強制され、SAML リダイレクトバインディングが無効になり、ワイルドカードリダイレクト URL が禁止されるなど、SAML クライアントにセキュリティのベストプラクティスが適用されます。

新しい認証機能 Confirm override existing link が追加されました。この認証機能を使用すると、以前に別の IDP アイデンティティにリンクされていた Keycloak ユーザーのリンクされた IDP ユーザー名をオーバーライドできます。詳細については、サーバー管理ガイドを参照してください。貢献してくれた Lex Cao に感謝します。

検証可能な資格情報発行のための OpenID - 実験的サポート

検証可能な資格情報発行のための OpenID (OID4VCI) のサポートが進行中です。現時点では、これはまだ進行中の作業ですが、徐々に機能が追加されています。Keycloak は、事前承認コードフローをサポートする OID4VC 発行者として機能できます。JWT-VC、SD-JWT-VC、VCDM 形式の検証可能な資格情報がサポートされています。貢献とフィードバックをくれた OAuth SIG グループのメンバー、特に Stefan WiedemannFrancis PouatchaTakashi NorimatsuYutaka Obuchi に感謝します。

ユーザー属性による検索で大文字と小文字を区別しなくなる

ユーザー属性でユーザーを検索する場合、Keycloak はユーザー属性名を小文字比較を強制することによって検索しなくなりました。この変更の目的は、ユーザー属性テーブルの Keycloak ネイティブインデックスを使用して検索を高速化することでした。データベースの照合順序が大文字と小文字を区別しない場合、検索結果は以前と同じままになります。データベースの照合順序が大文字と小文字を区別する場合、以前よりも検索結果が少なくなる可能性があります。

認証クライアントライブラリの破壊的修正

keycloak-authz-client ライブラリのユーザーの場合、AuthorizationResource.getPermissions(…​) を呼び出すと、List<Permission> が正しく返されるようになりました。

以前は、メソッド宣言が List<Permission> をアドバタイズしていたにもかかわらず、実行時に List<Map> が返されていました。

この修正により、リストまたはその内容を List<Map> にキャストすることに依存していたコードは破損します。このメソッドを何らかの形で使用したことがある場合は、これを行った可能性が高く、影響を受ける可能性があります。

クライアントの認証設定をエクスポートするときに ID が設定されなくなる

クライアントの認証設定をエクスポートするときに、リソース、スコープ、ポリシーの ID が設定されなくなりました。その結果、クライアントから別のクライアントに設定をインポートできるようになりました。

メトリクスおよびヘルスエンドポイント用の管理ポート

メトリクスおよびヘルスチェックエンドポイントは、標準の Keycloak サーバーポート経由ではアクセスできなくなりました。これらのエンドポイントは外部に公開されるべきではないため、別のデフォルトの管理ポート 9000 でアクセスできます。

これにより、Kubernetes 環境の標準の Keycloak エンドポイントとしてユーザーに公開しないことができます。新しい管理インターフェースは、新しいオプションセットを提供し、完全に構成可能です。

Keycloak Operator は、管理インターフェースがデフォルトでオンになっていると想定しています。詳細については、管理インターフェースの構成を参照してください。

リモートロギング用の Syslog

Keycloak は、リモートロギング用の Syslog プロトコルをサポートするようになりました。RFC 5424 で定義されたプロトコルを利用しています。デフォルトでは、syslog ハンドラーは無効になっていますが、有効にすると、すべてのログイベントがリモート syslog サーバーに送信されます。

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

クラス EnvironmentDependentProviderFactory の変更

メソッド EnvironmentDependentProviderFactory.isSupported() は数リリース前から非推奨となっており、削除されました。

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

すべての cache オプションはランタイム

cachecache-stackcache-config-file オプションをランタイム中に指定できるようになりました。これにより、ビルドフェーズを実行してイメージを再構築する必要がなくなりました。

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

高可用性ガイドの強化

高可用性ガイドに、バックアップサイトからプライマリサイトへの意図しない自動フェイルバックを防ぐために AWS Lambda を構成する方法に関するガイドが含まれるようになりました。

AccessTokenIDTokenJsonWebToken クラスから非推奨のメソッドを削除

このリリースでは、次のクラスから非推奨のメソッドを最終的に削除します

  • AccessToken

  • IDToken

  • JsonWebToken

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

メソッド getExpSingleUseObjectKeyModel に追加

AccessTokenIDTokenJsonWebToken から非推奨のメソッドを削除した結果、SingleUseObjectKeyModel も有効期限値に関連するメソッド名を一貫させるために変更されました。

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

PostgreSQL 16 のサポート

サポートおよびテスト済みのデータベースに PostgreSQL 16 が含まれるようになりました。

顧客アイデンティティおよびアクセス管理 (CIAM) とマルチテナントのサポートの導入

このリリースでは、Keycloak Organizations をテクノロジープレビュー機能として提供しています。

この機能は、いくつかのコア CIAM 機能を備えたレルムを提供します。これは、将来の Business-to-Business (B2B) および Business-to-Business-to-Customers (B2B2C) ユースケースに対処するための機能のベースラインとして機能します。

機能に関しては、この機能は完了しています。ただし、次のメジャーリリースで完全にサポートされるようにするためには、まだ作業が必要です。この残りの作業は、主にスケーラビリティに焦点を当てた本番環境へのデプロイメントに向けて機能を準備することです。また、次のメジャーリリースまでに得られるフィードバックによっては、ロードマップを損なうことなく、追加の機能を受け入れ、機能に価値を追加する可能性があります。

詳細については、サーバー管理ガイドを参照してください。

アップグレード

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

解決済みのすべての問題

新機能

機能強化

バグ