検索

2.6. その他の変更点

download PDF

2.6.1. Admin API コンテキストと Account コンテキストの両方におけるユーザー表現の変更

org.keycloak.representations.idm.UserRepresentationorg.keycloak.representations.account.UserRepresentation の両方の表現クラスが変更されました。これにより、ルートユーザー属性 (usernameemailfirstNamelastNamelocale など) が、それぞれ Admin API と Account API から表現ペイロードを取得または送信するときに一貫した表現を使用するようになりました。

usernameemailfirstNamelastNamelocale 属性が、新しい org.keycloak.representations.idm.AbstractUserRepresentation ベースクラスに移動しました。

なお、getAttributes メソッドはカスタム属性のみを表すことを目的としたものです。そのため、このメソッドによって返されるマップにルート属性が含まれることを期待しないでください。このメソッドは主に、特定のユーザーのカスタム属性を更新または取得するクライアントを対象としています。

ルート属性を含むすべての属性を解決するために、新しい getRawAttributes メソッドが追加されました。これにより、結果のマップにルート属性も含まれるようになりました。ただし、このメソッドは表現ペイロードからは利用できません。ユーザープロファイルを管理するときにサーバーによって使用されることを目的としたものです。

2.6.2. ビルド時のオプションの https-client-auth

オプション https-client-auth は、実行時のオプションとして扱われていましたが、これは Quarkus ではサポートされていません。代わりに、このオプションはビルド時に処理する必要があります。

2.6.3. オフラインセッションとリモートセッションの順次ロード

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

以前のコードでは、起動時にクラスター全体でリソース消費量が多くなり、実稼働環境での分析が困難で、ロード中にノードが再起動した場合に複雑な障害が発生する可能性がありました。そのため、セッションの順次ロードに変更になりました。

このバージョンおよび以前のバージョンの Red Hat build of Keycloak では、デフォルトでオフラインセッションをオンデマンドでロードします。これにより、オフラインセッションが多数ある場合は、それらを並行してプリロードするよりもスケーラビリティーが向上します。このデフォルト設定を使用するセットアップは、オフラインセッションのロードストラテジーの変更による影響を受けません。オフラインセッションの事前ロードが有効なセットアップは、オフラインセッションのプリロードが無効なセットアップに移行する必要があります。

2.6.4. Infinispan メトリクスがキャッシュマネージャーとキャッシュ名のラベルを使用

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

ラベルのない古いメトリクスの例

vendor_cache_manager_keycloak_cache_sessions_statistics_approximate_entries_in_memory{cache="sessions",node="..."}

ラベル付きの新しいメトリクスの例

vendor_statistics_approximate_entries_in_memory{cache="sessions",cache_manager="keycloak",node="..."}

インストールに対する変更を元に戻すには、カスタム Infinispan XML 設定を使用して、次のように設定を変更します。

<metrics names-as-tags="false" />

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

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

ユーザーがアカウントコンソールなどを使用して属性を更新できるセットアップでは、検証を追加してサービス拒否攻撃を防止してください。管理対象外の属性が許可されていないこと、およびすべての編集可能な属性に入力長を制限する検証があることを確認してください。

管理対象外の属性の場合、最大長は 2048 文字です。管理対象の属性の場合、デフォルトの最大長は 2048 文字です。管理者は、length タイプのバリデーターを追加することでこれを変更できます。

警告

Red Hat build of Keycloak はユーザー関連のオブジェクトを内部キャッシュにキャッシュします。より長い属性を使用すると、キャッシュによって消費されるメモリーが増加します。したがって、長さ属性のサイズを制限することを推奨します。大きなオブジェクトは Red Hat build of Keycloak の外部に保存し、ID または URL で参照することを検討してください。

この変更により、テーブル USER_ATTRIBUTE および FED_USER_ATTRIBUTE に新しいインデックスが追加されます。これらのテーブルに 300000 を超えるエントリーが含まれている場合、Red Hat build of Keycloak は、デフォルトで自動スキーマ移行中にインデックスの作成をスキップし、Red Hat build of Keycloak の起動後に手動で適用できるように、代わりに移行中にコンソールに SQL ステートメントを記録します。異なる制限を設定する方法の詳細は、アップグレードガイド を参照してください。

2.6.5.1. LDAP の追加移行手順

これは、以下のすべての条件を満たすインストールが対象です。

  • LDAP ディレクトリー内のユーザー属性が 2048 文字を超えているか、バイナリー属性が 1500 バイトを超えている。
  • 管理者またはユーザーが、管理コンソール、API、またはアカウントコンソールを介して属性を変更する。

UI および REST API を介してこれらの属性を変更できるようにするには、次の手順を実行します。

  1. 上記で特定された属性を、レルムのユーザープロファイルで管理対象の属性として宣言します。
  2. 前のステップで追加した各属性に対して、属性値の必要な最小長と最大長を指定して length バリデーターを定義します。バイナリー値の場合は、Red Hat build of Keycloak 内部のバイナリー値 base64 エンコーディング用のオーバーヘッドとして、予想されるバイナリー長に 33 パーセントを追加します。

2.6.5.2. カスタムのユーザーストレージプロバイダーの追加移行手順

これは、以下のすべての条件を満たすインストールが対象です。

  • Red Hat build of Keycloak のデータベースとして MariaDB または MySQL を実行している。
  • テーブル FED_USER_ATTRIBUTE のエントリーの VALUE 列に 2048 文字を超える内容が含まれている。このテーブルは、フェデレーションが有効になっているカスタムユーザープロバイダーに使用されます。
  • 管理者またはユーザーが、管理コンソールまたはアカウントコンソールを介して長い属性を変更する。

UI および REST API を介してこれらの属性を変更できるようにするには、次の手順を実行します。

  1. 上記で特定された属性を、レルムのユーザープロファイルで管理対象の属性として宣言します。
  2. 前のステップで追加した各属性に対して、属性値の必要な最小長と最大長を指定して length バリデーターを定義します。

2.6.6. Admin send-verify-email API が同じメール検証テンプレートを使用

PUT /admin/realms/{realm}/users/{id}/send-verify-email

このリリースでは、この API は executeActions.ftl の代わりに email-verification.ftl テンプレートを使用します。

アップグレード前

Perform the following action(s): Verify Email

アップグレード後

Confirm validity of e-mail address email@example.org.

この API を使用したユーザーのメールアドレスの検証方法を変更するために executeActions.ftl テンプレートをカスタマイズした場合は、変更内容を新しいテンプレートに移してください。

デフォルトの有効期間の値 (12 時間) をオーバーライドできるように、lifespan という新しいパラメーターが導入されます。

以前の動作を希望する場合は、次のように execute-actions-email API を使用してください。

PUT /admin/realms/{realm}/users/{id}/execute-actions-email

["VERIFY_EMAIL"]

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

このリリースでは、パスワードハッシュ化のデフォルトを、パスワード保存に関する OWASP の推奨事項 に合わせて調整しました。

この変更の一環として、デフォルトのパスワードハッシュ化プロバイダーが pbkdf2-sha256 から pbkdf2-sha512 に変更になりました。また、pbkdf2 ベースのパスワードハッシュ化アルゴリズムのデフォルトハッシュ反復回数が次のように変更になりました。

プロバイダー IDアルゴリズム以前の反復回数新しい反復回数

pbkdf2

PBKDF2WithHmacSHA1

20.000

1.300.000

pbkdf2-sha256

PBKDF2WithHmacSHA256

27.500

600.000

pbkdf2-sha512

PBKDF2WithHmacSHA512

30.000

210.000

レルムが hashAlgorithmhashIterations を使用してパスワードポリシーを明示的に設定していない場合、新しい設定は次回のパスワードベースのログイン時、またはユーザーパスワードが作成または更新されたときに有効になります。

2.6.7.1. 新しいパスワードハッシュ化設定のパフォーマンス

Intel i9-8950HK CPU (12) @ 4.800GHz を搭載したマシンでのテストで、1000 個のパスワードをハッシュ化した場合は、次の時間差が得られました (3 回の実行の平均)。なお、PBKDF2WithHmacSHA1 の平均所要時間は、実行時間が長いため、より少ない数のパスワードで計算されました。

プロバイダー IDアルゴリズム以前の所要時間新しい所要時間

pbkdf2

PBKDF2WithHmacSHA1

122 ms

3.114 ms

+2.992 ms

pbkdf2-sha256

PBKDF2WithHmacSHA256

20 ms

451 ms

+431 ms

pbkdf2-sha512

PBKDF2WithHmacSHA512

33 ms

224 ms

+191 ms

pbkdf2 プロバイダーのユーザーは、許容できるパフォーマンスを再び得るために、ハッシュ反復回数を明示的に減らす必要がある場合があります。これは、レルムのパスワードポリシーでハッシュ反復回数を明示的に設定することによって実行できます。

2.6.7.2. 全体的な CPU 使用率の増加とデータベースアクティビティーの一時的な増加が予想されることについて

Red Hat のテストでは、パスワードベースのログインあたりの CPU 使用率が 5 倍に増加しました。この値には、変更されたパスワードハッシュ化と変更されていない TLS 接続処理の両方が含まれます。アクセストークンとクライアントクレデンシャルグラントの更新など、Red Hat build of Keycloak による平均化効果により、全体的な CPU 使用率の増加は 2 - 3 倍程度になるはずです。ただし、これはインストールの固有のワークロードによって異なります。

アップグレード後、パスワードベースのログイン中に、ユーザーのパスワードが、新しいハッシュアルゴリズムとハッシュ反復回数を使用して 1 回限りのアクティビティーとして再ハッシュ化され、データベースで更新されます。これにより、Red Hat build of Keycloak の内部キャッシュからユーザーがクリアされるため、データベースレベルでの読み取りアクティビティーも増加します。このようなデータベースアクティビティーの増加は、再ハッシュ化されたユーザーのパスワードが増えるにつれて、次第に減少します。

2.6.7.3. 古い pbkdf2-sha256 パスワードハッシュ化の使用を続ける方法

レルムの古いパスワードハッシュ化を保持するには、レルムパスワードポリシーで hashAlgorithmhashIterations を明示的に指定します。

  • Hashing Algorithm: pbkdf2-sha256
  • Hashing Iterations: 27500

2.6.8. 移行用の JPA プロバイダー設定オプションの名前変更

マップストアの削除後に、次の設定オプションの名前が変更されました。

  • spi-connections-jpa-legacy-initialize-empty から spi-connections-jpa-quarkus-initialize-empty
  • spi-connections-jpa-legacy-migration-export から spi-connections-jpa-quarkus-migration-export へ
  • spi-connections-jpa-legacy-migration-strategy から spi-connections-jpa-quarkus-migration-strategy

2.6.9. 一時的なロックアウトログのイベントへの置き換え

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

これは成功イベントであるため、新しいイベントはデフォルトで DEBUG レベルでログに記録されます。すべての成功イベントのログレベルを変更するには、サーバー管理ガイドのイベントリスナーの章 で説明されているように、spi-events-listener-jboss-logging-success-level 設定を使用します。

カスタムアクションまたはカスタムログエントリーをトリガーするには、サーバー開発者ガイド のイベントリスナー SPI の説明に従って、カスタムイベントリスナーを作成します。

2.6.10. Keycloak JS インポートを更新する必要性

Keycloak JS を Red Hat build of Keycloak から直接ロードする場合は、このセクションを無視しても問題ありません。NPM パッケージから Keycloak JS をロードし、Webpack、Vite などのバンドラーを使用している場合は、コードにいくつかの変更を加える必要がある可能性があります。Keycloak JS パッケージは、package.json ファイルの exports フィールド を使用するようになりました。つまり、インポートを変更する必要がある可能性があります。

// Before
import Keycloak from 'keycloak-js/dist/keycloak.js';
import AuthZ from 'keycloak-js/dist/keycloak-authz.js';

// After
import Keycloak from 'keycloak-js';
import AuthZ from 'keycloak-js/authz';

2.6.11. HS256 から HS512 への内部アルゴリズムの変更

Red Hat build of Keycloak が内部トークン (Red Hat build of Keycloak 自体によって消費される JWT、たとえばリフレッシュトークンやアクショントークン) に署名するために使用するアルゴリズムが、HS256 からよりセキュアな HS512 に変更されます。hmac-generated-hs512 という名前の新しいキープロバイダーがレルムに追加されました。移行されたレルムでは、古い hmac-generated プロバイダーと古い HS256 キーが維持され、アップグレード前に発行されたトークンが引き続き検証されることに注意してください。古いトークンが存在しなくなったら、鍵のローテーションガイドライン に従って、HS256 プロバイダーを手動で削除できます。

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

コンテナー内で実行する場合の JVM オプション -Xms および -Xmx が、-XX:InitialRAMPercentage-XX:MaxRAMPercentage に置き換えられました。Red Hat build of Keycloak は、静的な最大ヒープサイズ設定ではなく、コンテナーメモリーの合計の 70% に最大値を指定します。

ヒープサイズはコンテナーの合計メモリーに基づいて動的に計算されるため、コンテナーの メモリー制限を必ず設定 してください。

警告

メモリー制限が設定されていない場合は、最大ヒープサイズがコンテナーメモリーの合計の 70% まで増加するため、メモリー消費量が急激に増加します。

詳細は、異なるメモリー設定を指定する を参照してください。

2.6.13. OAuth 2.0/OpenID Connect Authentication Response に iss パラメーターを追加

RFC 9207 OAuth 2.0 Authorization Server Issuer Identification 仕様で、セキュアな認証応答を実現するために、OAuth 2.0/OpenID Connect Authentication Response に iss パラメーターが追加されました。

過去のリリースにはこのパラメーターはありませんでしたが、仕様の要求に従って、Red Hat build of Keycloak にはデフォルトでこのパラメーターが追加されました。

ただし、一部の OpenID Connect/OAuth2 アダプター、特に Red Hat build of Keycloak の古いアダプターでは、この新しいパラメーターで問題が発生する可能性があります。

たとえば、クライアントアプリケーションへの認証に成功すると、パラメーターは常にブラウザー URL に表示されます。このような場合は、認証応答への iss パラメーターの追加を無効にすると役立つことがあります。これは、「古いアダプターとの互換性」 で説明されているとおり、Red Hat build of Keycloak 管理コンソールで、OpenID Connect Compatibility Modes を含むセクション内のクライアントの詳細で特定のクライアントに対して行うことができます。専用の Exclude Issuer From Authentication Response スイッチが存在します。これをオンにすると、認証応答に iss パラメーターが追加されるのを防ぐことができます。

2.6.14. ワイルドカード文字の処理

JPA では検索時にワイルドカード %_ を使用できますが、LDAP などの他のプロバイダーでは * のみを使用できます。* は、LDAP では自然なワイルドカード文字であるため、すべての場所で機能しますが、JPA では検索文字列の先頭と末尾でのみ機能していました。このリリース以降、ワイルドカード文字 * だけが、検索文字列内のすべての場所で、すべてのプロバイダーで一貫して機能するようになりました。JPA の %_ など、特定のプロバイダー内のすべての特殊文字はエスケープされます。引用符を追加した完全一致検索 (例: "w*ord") の動作は、以前のリリースと同じままです。

2.6.15. レルムおよびクライアントロールマッパーによってマッピングされたクレームの値形式の変更

このリリースより前は、Multivalued 設定が無効になっていると、レルム (User Realm Role) とクライアント (User Client Role) の両方のプロトコルマッパーが、文字列化された JSON 配列をマッピングしていました。

しかし、Multivalued 設定は、クレームをリストとしてマッピングするか、同じ値リストからの単一の値のみをマッピングするか (設定が無効な場合) を示すものです。

このリリースでは、ロールマッパーとクライアントマッパーが、単一値とマークされている場合 (Multivalued が無効な場合) に、ユーザーの有効なロールからの単一の値にマッピングされるようになりました。

2.6.16. ログイン UI のパスワードフィールドの変更

このバージョンでは、パスワード入力を非表示/表示を切り替えるトグルを導入する予定です。

影響を受けるページ:

  • login.ftl
  • login-password.ftl
  • login-update-password.ftl
  • register.ftl
  • register-user-profile.ftl

一般的に、すべての <input type="password" name="password"/> が div 内にカプセル化されるようになりました。input 要素の後に、パスワード入力の表示を切り替えるボタンが続きます。

以前のコードの例:

<input type="password" id="password" name="password" autocomplete="current-password" style="display:none;"/>

新しいコードの例:

<div class="${properties.kcInputGroup!}">
    <input type="password" id="password" name="password" autocomplete="current-password" style="display:none;"/>
    <button class="pf-c-button pf-m-control" type="button" aria-label="${msg('showPassword')}"
            aria-controls="password" data-password-toggle
            data-label-show="${msg('showPassword')}" data-label-hide="${msg('hidePassword')}">
        <i class="fa fa-eye" aria-hidden="true"></i>
    </button>
</div>

2.6.17. kc.sh とシェルのメタ文字

kc.sh が、パラメーターおよび環境変数 JAVA_OPTS_APPEND と JAVA_ADD_OPENS に対して追加のシェル eval を使用しなくなりました。そのため、二重のエスケープ/引用符の使用を継続すると、パラメーターが誤解されることになります。以下に例を示します。

bin/kc.sh start --db postgres --db-username keycloak --db-url "\"jdbc:postgresql://localhost:5432/keycloak?ssl=false&connectTimeout=30\"" --db-password keycloak --hostname localhost

このような場合は、代わりに単一のエスケープを使用してください。

bin/kc.sh start --db postgres --db-username keycloak --db-url "jdbc:postgresql://localhost:5432/keycloak?ssl=false&connectTimeout=30" --db-password keycloak --hostname localhost

また、この変更により、すべての引数を単一の引用符で囲んだ値を使用して kc.sh を呼び出すことができなくなります。たとえば、以下は使用できなくなりました。

bin/kc.sh "start --help"

個別の引数を使用する必要があります。

bin/kc.sh start --help

同様に、以下は使用できなくなりました。

bin/kc.sh build "--db postgres"

個別の引数を使用する必要があります。

bin/kc.sh build --db postgres

Dockerfile 実行コマンドでも個別の引数の使用が必要です。

2.6.18. GroupProvider の変更

最上位レベルのグループを検索して参照できるようにする新しいメソッドが追加されました。このインターフェイスを実装する場合は、次のメソッドを実装する必要があります。

Stream<GroupModel> getTopLevelGroupsStream(RealmModel realm,
                                           String search,
                                           Boolean exact,
                                           Integer firstResult,
                                           Integer maxResults)

2.6.19. GroupRepresentation の変更

  • 特定のグループに含まれるサブグループの数をクライアントに通知するための新しいフィールド subGroupCount が追加されました。
  • subGroups リストが、階層データを要求するクエリーでのみ入力されるようになりました。
  • このフィールドは "下から上" へ入力されるため、グループのすべてのサブグループを取得するために使用することはできません。GroupProvider を使用するか、GET {keycloak server}/realms/{realm}/groups/{group_id}/children からサブグループを要求してください。

2.6.20. Group Admin API の新しいエンドポイント

ページネーションをサポートする特定のグループのサブグループを取得する方法として、エンドポイント GET {keycloak server}/realms/{realm}/groups/{group_id}/children が追加されました。

2.6.21. RESTEasy リアクティブ

RESTEasy Classic が利用不可になり、選択することができなくなりました。RESTEasy Classic および org.jboss.resteasy.spi.* に含まれる関連パッケージに依存している SPI およびコードは、移行が必要になります。

2.6.22. 部分エクスポートに manage-realm 権限が必要

エンドポイント POST {keycloak server}/realms/{realm}/partial-export と、管理コンソールの対応するアクションの実行に必要な権限が、view-realm ではなく manage-realm になりました。このエンドポイントはレルム設定を JSON ファイルにエクスポートするものであるため、新しい権限のほうが適切です。パラメーター exportGroupsAndRolesexportClients は、同じ権限 (query-groupsview-clients) を引き続き管理します。これらのパラメーターは、それぞれレルムグループ/ロールとクライアントをエクスポートに追加します。

2.6.23. クライアントの有効なリダイレクト URI を常に厳密な文字列照合により比較

バージョン 1.8.0 で、リダイレクト URI をクライアントの指定された有効なリダイレクトと比較する際に、ホスト名とスキームに小文字が導入されました。ただし、これはすべてのプロトコルで完全に機能したわけではありません。たとえば、ホストが http では小文字で、https では小文字ではない場合がありました。OAuth 2.0 セキュリティーの現在のベストプラクティス では、厳密な文字列照合を使用して URI を比較するよう推奨しています。そのため、Red Hat build of Keycloak はこの推奨事項に従い、現時点では、ホスト名とスキームについても、大文字と小文字を厳密に区別して有効なリダイレクトを比較しています。

古い動作に依存しているレルムの場合は、クライアントの有効なリダイレクト URI に、サーバーによって認識される URI ごとに個別のエントリーが保持されるようになりました。

クライアントを設定する際の手順と詳細度は増加しますが、新しい動作により、よりセキュアなデプロイメントが可能になります。パターンベースのチェックがセキュリティー問題の原因となることが多いためです。チェックの実装方法だけでなく、設定方法も原因となります。

2.6.24. Groups.getSubGroups の briefRepresentation パラメーターの処理を修正

バージョン 23.0.0 で、Groups リソースに新しいエンドポイント getSubGroups ("children") が導入されましたが、パラメーターの briefRepresentation が、サブグループの完全な表現を取得することを意味していました。この意味が、短い表現を返すように変更になりました。

2.6.25. jboss-logging イベントメッセージの変更

jboss-logging メッセージの値が、引用符 (デフォルトでは文字 ") で囲まれ、改行を防ぐためにサニタイズされるようになりました。プロバイダーに、新しい動作をカスタマイズできる 2 つの新しいオプション (spi-events-listener-jboss-logging-sanitizespi-events-listener-jboss-logging-quotes) があります。たとえば、サニタイズと引用符の付加の両方を回避するには、次のようにしてサーバーを起動します。

./kc.sh start --spi-events-listener-jboss-logging-sanitize=false --spi-events-listener-jboss-logging-quotes=none ...

オプションの詳細は、すべてのプロバイダー設定 を参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.