Keycloak 24.0.0 がリリースされました

2024年3月4日

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

ハイライト

サポートされるユーザープロファイルとプログレッシブプロファイリング

ユーザープロファイルプレビュー機能は、完全にサポートされる機能に昇格し、ユーザープロファイルはデフォルトで有効になりました。

過去数ヶ月間、Keycloakチームはユーザープロファイル機能を完全にサポートするために多大な努力を払ってきました。今回のリリースでも、その取り組みを継続しました。徹底的なテストと素晴らしいコミュニティからのフィードバックに基づき、多くの改善、修正、および polish が行われました。

この機能のハイライトをいくつか紹介します。

  • ユーザーと管理者が管理できる属性をきめ細かく制御することで、予期しない属性や値が設定されるのを防ぐことができます。

  • どのユーザー属性が管理され、一般ユーザーまたは管理者へのフォームに表示されるべきかを指定する機能。

  • 動的フォーム - 以前は、ユーザーがプロファイルを作成または更新するフォームには、ユーザー名、メールアドレス、名、姓などの4つの基本属性が含まれていました。属性を追加(または一部のデフォルト属性を削除)するには、カスタムテーマを作成する必要がありました。特定のデプロイメントの要件に基づいて、ユーザーに要求された属性のみが表示されるようになったため、カスタムテーマは不要になる可能性があります。

  • 検証 - 最大長または最小長、特定の正規表現、または特定の属性を URL または数値に制限するために使用できる組み込みバリデーターを含む、ユーザー属性のバリデーターを指定する機能。

  • アノテーション - 特定の属性を、たとえばテキストエリア、指定されたオプションを持つ HTML セレクト、カレンダー、またはその他の多くのオプションとしてレンダリングする必要があることを指定する機能。また、JavaScript コードを特定のフィールドにバインドして、属性のレンダリング方法を変更したり、その動作をカスタマイズしたりすることもできます。

  • プログレッシブプロファイリング - 一部のフィールドが、scope パラメーターの特定の値に対してのみフォームで必須または利用可能であることを指定する機能。これにより、プログレッシブプロファイリングが効果的に可能になります。登録時に20個の属性をユーザーに尋ねる必要はもうありません。代わりに、ユーザーが使用する個々のクライアントアプリケーションの要件に応じて、属性を段階的に入力するようにユーザーに求めることができます。

  • 以前のバージョンからの移行 - ユーザープロファイルは常に有効になっていますが、この機能を使用しなかったユーザーにとっては以前と同様に動作します。ユーザープロファイルの機能を利用できますが、必須ではありません。移行手順については、アップグレードガイドを参照してください。

サポートされる機能としてのユーザープロファイルの最初のリリースは、アイデンティティ管理に関するより多くの機能を提供するための出発点およびベースラインにすぎません。

コミュニティから多くのアイデア、要件、貢献が寄せられた素晴らしい Keycloak コミュニティに、心から感謝申し上げます!特に感謝を申し上げます。

ユーザープロファイルの機能の詳細については、サーバー管理ガイドを参照してください。

ユーザープロファイル SPI の破壊的変更

このリリースでは、ユーザープロファイル SPI の変更が、この SPI に基づく既存の実装に影響を与える可能性があります。詳細については、アップグレードガイドを参照してください。

ユーザープロファイルとレルムに基づいてページをレンダリングするための Freemarker テンプレートの変更

このリリースでは、レルムに設定されたユーザープロファイル構成に基づいて属性を動的にレンダリングできるように、次のテンプレートが更新されました。

  • login-update-profile.ftl

  • register.ftl

  • update-email.ftl

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

ブローカー経由での初回ログイン時のプロファイル更新ページ用の新しい Freemarker テンプレート

このリリースでは、サーバーは、ユーザーが idp-review-user-profile.ftl テンプレートを使用して初めてブローカー経由で認証するときに、プロファイル更新ページをレンダリングします。

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

Java アダプターの非推奨化と削除

2022年に、Keycloak 19 での Keycloak アダプターの非推奨化を発表しました。コミュニティがこれに対応するためにより多くの時間を与えるために、延期されました

それを念頭に置いて、これは OpenID Connect および SAML アダプターを含む Keycloak の最後のメジャーリリースとなります。Jetty 9.x は 2022 年からサポートされていなかったため、Jetty アダプターはすでにこのリリースで削除されました。

汎用的な Authorization Client ライブラリは引き続きサポートされ、他の OAuth 2.0 または OpenID Connect ライブラリと組み合わせて使用​​することを目的としています。

今後も提供を続ける唯一のアダプターは、最新リリースの WildFly および EAP 8.x 用の SAML アダプターです。これをサポートし続ける理由は、Keycloak の SAML コードベースの大部分が WildFly からの貢献によるものであるという事実にあります。この貢献の一環として、WildFly および EAP 用の SAML アダプターを長期的にメンテナンスすることに合意しました。

Jetty アダプターの削除

Jetty 9.4 はコミュニティで長期間サポートされておらず、2022 年にサポートが終了しました。同時に、アダプターはより新しいバージョンの Jetty で更新またはテストされていません。これらの理由から、Jetty アダプターはこのリリースから削除されました。

新しいウェルカムページ

Keycloak の初回使用時に表示される「ウェルカム」ページが再設計されました。より良いセットアップエクスペリエンスを提供し、PatternFly の最新バージョンに準拠しています。簡素化されたページレイアウトには、最初の管理ユーザーを登録するためのフォームのみが含まれています。登録が完了すると、ユーザーは直接管理コンソールに送信されます。

カスタムテーマを使用している場合は、新しいウェルカムページをサポートするように更新する必要がある場合があります。詳細については、アップグレードガイドを参照してください。

新しいアカウントコンソールがデフォルトに

Keycloak 22 でアカウントコンソールバージョン 3 をプレビュー機能として導入しました。このリリースでは、これをデフォルトバージョンとし、バージョン 2 を非推奨化するプロセスに入り、その後のリリースで削除されます。

この新しいバージョンには、ユーザープロファイル機能の組み込みサポートがあり、管理者アカウントコンソールでユーザーが利用できる属性を構成でき、ログイン後にユーザーを個人アカウントページに直接誘導します。

このテーマのカスタマイズ機能を使用または拡張している場合は、追加の移行を実行する必要がある場合があります。詳細については、アップグレードガイドを参照してください。

Keycloak JS

package.json での exports フィールドの使用

Keycloak JS アダプターは、package.jsonexports フィールドを使用するようになりました。この変更により、Webpack 5 や Vite などのよりモダンなバンドラーのサポートが向上しますが、避けられない破壊的変更が伴います。詳細については、アップグレードガイドを参照してください。

PKCE がデフォルトで有効

Keycloak JS アダプターは、pkceMethod オプションをデフォルトで S256 に設定するようになりました。この変更により、アダプターを使用するすべてのアプリケーションで Proof Key Code Exchange (PKCE) が有効になります。PKCE をサポートしていないシステムでアダプターを使用する場合は、pkceMethod オプションを false に設定して無効にすることができます。

パスワードハッシュの変更

このリリースでは、パスワードハッシュのデフォルトを パスワードストレージに関する OWASP 推奨事項に一致するように調整しました。

この変更の一環として、デフォルトのパスワードハッシュプロバイダーが pbkdf2-sha256 から pbkdf2-sha512 に変更されました。また、pbkdf2 ベースのパスワードハッシュアルゴリズムのデフォルトハッシュ反復回数が変更されました。この変更は、最新の推奨事項に沿ったセキュリティの向上を意味しますが、パフォーマンスに影響を与えます。レルムにパスワードポリシー hashAlgorithmhashIterations を追加することで、古い動作を維持することが可能です。詳細については、アップグレードガイドを参照してください。

軽量アクセス トークンのサポート

このリリースには、軽量アクセス トークンのサポートが含まれています。その結果、指定されたクライアントに対してより小さなアクセス トークンを持つことができます。これらのトークンには少数のクレームしか含まれていないため、サイズが小さくなります。軽量アクセス トークンは、デフォルトでレルムキーによって署名された JWT であり、依然としていくつかの非常に基本的なクレームが含まれていることに注意してください。

このリリースでは、一部の OIDC プロトコルマッパーで利用可能な 軽量アクセス トークンに追加 フラグが導入されています。特定のクレームを軽量アクセス トークンに追加する必要があるかどうかを指定するには、このフラグを使用します。デフォルトでは OFF になっています。つまり、ほとんどのクレームは追加されません。

また、クライアントポリシーエグゼキュータが存在します。特定のクライアントリクエストで軽量アクセス トークンと通常のアクセス トークンのどちらを使用するかを指定するために使用します。エグゼキュータの代替手段は、クライアントの詳細設定で 常に軽量アクセス トークンを使用する フラグを使用することです。これにより、クライアントは常に軽量アクセス トークンを使用するようになります。より柔軟性が必要な場合は、エグゼキュータが代替手段になる可能性があります。たとえば、デフォルトで軽量アクセス トークンを使用し、指定された scope パラメーターに対してのみ通常のトークンを使用することを選択できます。

以前のリリースでは、トークンイントロスペクションに追加 スイッチが追加されました。アクセス トークンに存在しないクレームをイントロスペクションエンドポイントのレスポンスに追加するために使用します。

貢献してくれた Shigeyuki Kabano に感謝します。また、この機能の支援とレビューをしてくれた Takashi Norimatsu に感謝します。

OAuth 2.1 サポート

このリリースには、オプションの OAuth 2.1 サポートが含まれています。このリリースでは、新しいクライアントポリシープロファイルが導入されました。管理者はこれを使用して、クライアントと特定のクライアントリクエストが OAuth 2.1 仕様に準拠していることを確認できます。機密クライアント専用のクライアントプロファイルと、パブリッククライアント専用のプロファイルが存在します。Takashi NorimatsuShigeyuki Kabano の貢献に感謝します。

リフレッシュトークンフローでサポートされるスコープパラメーター

このリリース以降、トークンリフレッシュ用の OAuth2/OIDC エンドポイントの scope パラメーターがサポートされるようになりました。このパラメーターを使用して、元々付与されたスコープよりも少ないスコープでアクセス トークンを要求します。つまり、アクセス トークンスコープを増やすことはできません。このスコープ制限は、リフレッシュされたリフレッシュトークンのスコープには影響しません。この機能は、OAuth2 仕様で説明されているように機能します。Konstantinos Georgilakis の貢献に感謝します。

セキュアなリダイレクト URI 用のクライアントポリシーエグゼキュータ

新しいクライアントポリシーエグゼキュータ secure-redirect-uris-enforcer が導入されました。これを使用して、クライアントが使用できるリダイレクト URI を制限します。たとえば、クライアントリダイレクト URI にワイルドカードを含めることはできない、特定のドメインからのものである必要がある、OAuth 2.1 準拠である必要があるなどを指定できます。Lex CaoTakashi Norimatsu の貢献に感謝します。

DPoP を強制するためのクライアントポリシーエグゼキュータ

新しいクライアントポリシーエグゼキュータ dpop-bind-enforcer が導入されました。dpop プレビューが有効になっている場合、特定のクライアントに DPoP を強制するために使用できます。Takashi Norimatsu の貢献に感謝します。

EdDSA のサポート

EdDSA レルムキーを作成し、さまざまなクライアントの署名アルゴリズムとして使用できます。たとえば、これらのキーを使用して、トークンに署名したり、署名付き JWT でのクライアント認証に使用したりできます。この機能には、Keycloak 自体がサードパーティのアイデンティティプロバイダーへの private_key_jwt 認証に使用されるクライアントアサーションに署名するアイデンティティブローカリングが含まれています。Takashi NorimatsuMuhammad Zakwan Bin Mohd Zahid の貢献に感謝します。

JavaKeystore プロバイダーでサポートされる EC キー

レルムキーを提供するプロバイダー JavaKeystoreProvider は、以前にサポートされていた RSA キーに加えて、EC キーをサポートするようになりました。Stefan Wiedemann の貢献に感謝します。

アイデンティティプロバイダーの private_key_jwt 認証を使用する場合に JWT に X509 サムプリントを追加するオプション

OIDC アイデンティティプロバイダーには、プライベートキーで署名された JWT によるクライアント認証が使用される場合に、JWT に X.509 ヘッダーを追加 オプションが追加されました。このオプションは、Azure AD など、サムプリントが JWT に存在する必要がある一部のアイデンティティプロバイダーとの相互運用に役立ちます。MT の貢献に感謝します。

OAuth Grant Type SPI

Keycloak コードベースには、OAuth Grant Type SPI を導入するための内部更新が含まれています。この更新により、Keycloak OAuth 2 トークンエンドポイントでサポートされるカスタムグラントタイプを導入する際の柔軟性が向上します。Dmitry Telegin の貢献に感謝します。

CORS の改善

CORS 関連の Keycloak 機能は SPI に抽出され、これにより柔軟性が向上する可能性があります。CorsSPI は内部であり、将来のリリースで変更される可能性があることに注意してください。Dmitry Telegin の貢献に感謝します。

トラストストアの改善

Keycloak は、改善されたトラストストア構成オプションを導入します。Keycloak トラストストアは、送信接続、mTLS、およびデータベースドライバーを含むサーバー全体で使用されるようになりました。個々の領域に対して個別のトラストストアを構成する必要はなくなりました。トラストストアを構成するには、トラストストアファイルまたは証明書をデフォルトの conf/truststores に配置するか、新しい truststore-paths 構成オプションを使用します。詳細については、関連する ガイドを参照してください。

バージョン管理された機能

機能はバージョン管理をサポートするようになりました。下位互換性を維持するために、既存のすべての機能(account2 および account3 を含む)はバージョン 1 としてマークされています。新しく導入された機能はバージョン管理を使用します。つまり、ユーザーは目的の機能のさまざまな実装から選択できます。

詳細については、機能ガイドを参照してください。

Keycloak CR トラストストア

Keycloak CR を使用して、新しいサーバーサイドのトラストストア処理を利用することもできます。たとえば、

spec:
  truststores:
    mystore:
      secret:
        name: mystore-secret
    myotherstore:
      secret:
        name: myotherstore-secret

現在、Secrets のみがサポートされています。

Kubernetes CA を信頼する

Kubernetes CA の証明書は、Operator によって管理される Keycloak Pods に自動的に追加されます。

SAML アイデンティティプロバイダーの自動証明書管理

SAML アイデンティティプロバイダーは、IDP エンティティメタデータ記述子エンドポイントから署名証明書を自動的にダウンロードするように構成できるようになりました。新しい機能を使用するには、プロバイダーの [メタデータ記述子 URL] オプション(証明書を含む IDP メタデータ情報が公開されている URL)を構成し、[メタデータ記述子 URL を使用する] を [ON] に設定します。証明書は、その URL から自動的にダウンロードされ、public-key-storage SPI にキャッシュされます。証明書は、プロバイダーページの [アクション] コンボを使用して、管理コンソールから再ロードまたはインポートすることもできます。

新しいオプションの詳細については、ドキュメントを参照してください。

ロードバランサー用の非ブロッキングヘルスチェック

/lb-check で利用可能な新しいヘルスチェックエンドポイントが追加されました。実行はイベントループで実行されます。つまり、このチェックは、Keycloak がリクエストキューで待機している多くのリクエストを処理する必要がある過負荷状態でも応答性があります。この動作は、たとえば、負荷が高い別のサイトへのフェイルオーバーを回避するために、マルチサイトデプロイメントで役立ちます。エンドポイントは現在、組み込みおよび外部の Infinispan キャッシュの可用性をチェックしています。他のチェックは後で追加される可能性があります。

このエンドポイントはデフォルトでは利用できません。有効にするには、multi-site 機能を使用して Keycloak を実行します。詳細については、機能の有効化と無効化を参照してください。

Keycloak CR 最適化フィールド

Keycloak CR に startOptimized フィールドが追加されました。これは、開始コマンドに --optimized フラグを使用するかどうかに関するデフォルトの想定をオーバーライドするために使用できます。その結果、カスタム Keycloak イメージが使用されている場合でも、CR を使用してビルド時のオプションを構成できます。

強化されたリバースプロキシ設定

新しい --proxy-headers オプションを使用することで、Forwarded ヘッダーまたは X-Forwarded-* ヘッダーのいずれかの解析を個別に有効にできるようになりました。詳細については、リバースプロキシガイドを参照してください。元の --proxy オプションは非推奨となり、将来のリリースで削除されます。移行手順については、アップグレードガイドを参照してください。

管理者 API およびアカウントコンテキストの両方でのユーザー表現の変更

このリリースでは、これらの属性が管理者およびアカウント REST API の両方を使用するときにどのようにマーシャルおよびアンマーシャルされるかを調整するために、ルートユーザー属性(usernameemailfirstNamelastNamelocale など)を基本/抽象クラスに移動することでカプセル化しています。

この戦略は、クライアントによる属性の管理方法の一貫性を提供し、レルムに設定されたユーザープロファイル構成に準拠していることを保証します。

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

オフラインセッションとリモートセッションのシーケンシャルロード

このリリース以降、Keycloak クラスターの最初のメンバーは、リモートセッションを並行ではなく順番にロードします。オフラインセッションのプリロードが有効になっている場合、それらも順番にロードされます。

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

別の認証済みユーザーに代わってアクションを実行することはできなくなりました

このリリースでは、ユーザーがすでに認証されており、アクションが別のユーザーにバインドされている場合、メール検証などのアクションを実行できなくなりました。たとえば、メールリンクが別のアカウントにバインドされている場合、ユーザーは検証メールフローを完了できません。

メール検証フローの変更

このリリースでは、ユーザーがメールを検証するためのリンクをクリックしようとして、メールが以前に検証済みの場合、適切なメッセージが表示されます。

それに加えて、すでに検証済みのメールを検証しようとしたことを示す新しいエラー(EMAIL_ALREADY_VERIFIED)イベントが発生します。リンクが漏洩した場合のユーザーアカウントのハイジャックの試行を追跡したり、アクションを認識しない場合にユーザーに警告したりするために、このイベントを使用できます。

非推奨のオフラインセッションプリロード

Keycloak のデフォルトの動作は、オフラインセッションをオンデマンドでロードすることです。起動時にそれらをプリロードする古い動作は非推奨になりました。起動時にプリロードすると、セッション数の増加に伴って適切にスケールせず、Keycloak のメモリ使用量が増加するためです。古い動作は将来のリリースで削除されます。

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

メモリ内のオフラインセッションライフスパンオーバーライドの構成オプション

メモリ要件を削減するために、Infinispan キャッシュにインポートされたオフラインセッションのライフスパンを短縮するための構成オプションを導入しました。現在、オフラインセッションライフスパンオーバーライドはデフォルトで無効になっています。

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

Infinispan メトリクスは、キャッシュマネージャーとキャッシュ名にラベルを使用します

Keycloak の組み込みキャッシュのメトリクスを有効にすると、メトリクスはキャッシュマネージャーとキャッシュ名にラベルを使用するようになりました。

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

ユーザー属性値の長さの拡張

このリリース以降、Keycloak は、以前は制限されていた 255 文字を超えるユーザー属性値の保存と検索をサポートします。

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

ブルートフォース保護の変更

ブルートフォース保護にいくつかの機能強化がありました。

  1. ブルートフォース保護が原因で OTP またはリカバリーコードでの認証試行が失敗した場合、アクティブな認証セッションは無効になります。そのセッションでのそれ以上の認証試行は失敗します。

  2. 以前のバージョンの Keycloak では、管理者は、アカウントに対するブルートフォース攻撃が原因でユーザーを一時的または永続的に無効にするかを選択する必要がありました。管理者は、指定された回数の一時的なロックアウトの後、ユーザーを永続的に無効にできるようになりました。

  3. プロパティ failedLoginNotBeforebrute-force/users/{userId} エンドポイントに追加されました。

認可ポリシー

以前のバージョンの Keycloak では、ユーザー、グループ、またはクライアントポリシーの最後のメンバーが削除されると、そのポリシーも削除されていました。残念ながら、ポリシーがアグリゲートポリシーで使用されていた場合、これは権限昇格につながる可能性がありました。権限昇格を回避するために、エフェクトポリシーは削除されなくなり、管理者はそれらのポリシーを更新する必要があります。

Keycloak CR cache-config-file オプション

Keycloak CR では、cache 仕様の configMapFile フィールドを使用して cache-config-file オプションを指定できるようになりました。たとえば、

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  cache:
    configMapFile:
      name: my-configmap
      key: config.xml

Keycloak CR リソースオプション

Keycloak CR では、Keycloak コンテナーのコンピューティングリソースを管理するための resources オプションを指定できるようになりました。Keycloak CR を介してメインの Keycloak デプロイメントのリソースを個別に要求および制限したり、レルムインポート CR を介してレルムインポートジョブのリソースを個別に要求および制限したりする機能が提供されます。

値が指定されていない場合、デフォルトの requests メモリは 1700MiB に設定され、limits メモリは 2GiB に設定されます。

要件に基づいてカスタム値を次のように指定できます。

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  resources:
    requests:
      cpu: 1200m
      memory: 896Mi
    limits:
      cpu: 6
      memory: 3Gi

詳細については、Operator の詳細構成を参照してください。

一時的なロックアウトログがイベントに置き換えられました

ブルートフォースプロテクターによってユーザーが一時的にロックアウトされたときに、新しいイベント USER_DISABLED_BY_TEMPORARY_LOCKOUT が追加されました。新しいイベントが構造化された形式で情報を提供するため、ID KC-SERVICES0053 のログは削除されました。

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

Cookie の更新

Cookie 処理コードがリファクタリングおよび改善され、新しい Cookie プロバイダーが含まれるようになりました。これにより、Keycloak によって処理される Cookie の一貫性が向上し、必要に応じて Cookie に関する構成オプションを導入する機能が提供されます。

SAML ユーザー属性マッパー(NameID 用)で、有効な NameID 形式のみが提案されるようになりました

NameID 用ユーザー属性マッパーでは、Name ID Format オプションを次の値に設定できました。

  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName

  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName

  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos

  • urn:oasis:names:tc:SAML:2.0:nameid-format:entity

ただし、Keycloak はこれらの NameIDPolicy のいずれかを含む AuthnRequest ドキュメントの受信をサポートしていないため、これらのマッパーは使用されません。サポートされているオプションは、次の Name ID 形式のみを含むように更新されました。

  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient

コンテナ内で実行する場合の異なる JVM メモリ設定

初期ヒープサイズと最大ヒープサイズのハードコードされた値を指定する代わりに、Keycloak はコンテナの総メモリに対する相対値を使用します。JVM オプション -Xms および -Xmx は、-XX:InitialRAMPercentage および -XX:MaxRAMPercentage に置き換えられました。

詳細については、コンテナ内での Keycloak の実行ガイドを参照してください。

GELF ログハンドラーは非推奨になりました

基盤となるライブラリの提供が終了し、GELF との統合が提供されたため、Keycloak は GELF ログハンドラーをすぐにサポートしなくなります。この機能は将来のリリースで削除されます。外部ログ管理が必要な場合は、ファイルログ解析の使用を検討してください。

マルチサイトアクティブ/パッシブデプロイメントのサポート

高可用性と障害からの迅速な回復を提供するために、一部の環境では Keycloak を複数の独立したサイトにデプロイすることが不可欠です。このリリースでは、Keycloak のアクティブ/パッシブデプロイメントをサポートしています。

開始するには、クラウド環境に高可用性 Keycloak をデプロイするための包括的なブループリントも含まれている 高可用性ガイドを使用してください。

アップグレード

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

解決済みのすべての問題

新機能

機能強化

バグ