アップグレードガイド
概要
第1章 Red Hat build of Keycloak のアップグレード リンクのコピーリンクがクリップボードにコピーされました!
このガイドでは、Red Hat build of Keycloak をバージョン 24.0.x からバージョン 26.0.10 にアップグレードする方法を説明します。このガイドの手順は、次の順序で使用してください。
- 前バージョンの Red Hat build of Keycloak からの移行の変更を確認します。
- Red Hat build of Keycloak サーバーをアップグレードします。
- Red Hat build of Keycloak アダプターをアップグレードします。
- Red Hat build of Keycloak 管理クライアントをアップグレードします。
Red Hat Single Sign-On 7.6 のお客様の場合は、このガイドの代わりに 移行ガイド を使用してください。
第2章 移行の変更 リンクのコピーリンクがクリップボードにコピーされました!
2.1. ユーザープロファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
2.1.1. ユーザープロファイルがデフォルトで有効 リンクのコピーリンクがクリップボードにコピーされました!
ユーザープロファイル機能がデフォルトで有効になりました。ユーザープロファイルが有効であると想定されるため、declarative-user-profile
機能が使用できなくなりました。したがって、User Profile Enabled スイッチが Realm Settings から削除され、Unmanaged attributes に置き換えられました。以前のバージョンから移行する場合、動作は次のようになります。
- User Profile Enabled が ON に設定されているデプロイメントの場合、アップグレード後に Unmanaged attributes が OFF に設定されます。その結果、ユーザープロファイルによって明示的にサポートされているユーザー属性のみが許可されます。
-
User Profile Enabled が OFF (
declarative-user-profile
機能が無効なデプロイメントのデフォルト設定。この機能はデフォルトで無効でした) に設定されているデプロイメントの場合、アップグレード後に Unmanaged attributes が ON に設定されます。そのため、動作は、ユーザープロファイルが無効になっている以前のバージョンと基本的に同じです。Attributes タブは、管理コンソールのユーザー詳細部分に引き続き存在します。また、特定のカスタムテーマがサポートしている限り、ユーザーが登録ページやプロファイル更新ページなどの UI ページを通じて任意の属性を設定できるようになりました。カスタムテーマも以前と同じように動作します。ただし、ユーザープロファイルを使用するようにテーマを更新し、カスタム属性を追加する必要があったカスタムテーマを削除することを検討してください。テーマについては後続のセクションを参照してください。また、Unmanaged attributes を OFF に切り替えるか、このスイッチを管理者に対してのみ有効にして、管理対象の属性を主に使用することを検討してください。
Unmanaged attributes の詳細は、ユーザープロファイルのドキュメント を参照してください。
2.1.2. デフォルトの検証 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトのユーザープロファイル設定には、基本的な定義済みフィールドに対するデフォルトの一連の検証が付属しています。これらの検証は、declarative-user-profile
機能がデフォルトで無効になっていた以前のバージョンには存在しませんでした。下位互換性による問題がある場合は、必要に応じてデフォルトのバリデーターを変更できます。デフォルトのバリデーターは次のとおりです。
-
username
、email
、firstName
、lastName
属性の最大長は 255 文字です。これらの検証は、最大長が 255 文字のフィールドのUSER_ENTITY
テーブルに対するデータベース制約のため、以前のバージョンでも間接的に存在していました。ただし、ユーザーのストレージプロバイダーを使用する場合は、より長い値を使用できる可能性があります。 -
username
属性の最小長は 3 文字です。また、ユーザー名には、username-prohibited-characters
とup-username-not-idn-homograph
のバリデーターがデフォルトで備わっています。これは以前のバージョンには存在しなかったものです。これらの属性の詳細は、ユーザープロファイルドキュメントの検証セクション を参照してください。レルムスイッチのEdit username
が有効になっていない限り、ユーザー名はデフォルトでは編集できないことに注意してください。この変更により、既存のユーザーはユーザー名が正しくなくても引き続き機能し、ユーザー名の更新が強制されなくなります。一方、新しいユーザーは、管理 REST API によって登録時または作成時に正しいユーザー名を使用するように強制されます。 -
firstName
属性とlastName
属性には、person-name-prohibited-characters
バリデーターがあります。これは以前のバージョンには存在しなかったものです。これらの属性の詳細は、ユーザープロファイルドキュメントの検証セクション を参照してください。デフォルトでは名と姓の両方が編集可能であることに注意してください。そのため、以前のバージョンで正しくない名/姓を使用していたユーザーは、ユーザープロファイルを更新するときにそれらを更新する必要があります。
2.1.3. 不自然な文字を含むユーザー属性名 リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンでは、some:attribute
や some/attribute
などの属性名を使用してユーザーを作成できました。ユーザープロファイル設定では、このような不自然な名前の属性を作成することを意図的に禁止しています。そのため、レルムに対して Unmanaged attributes
を設定し、(理想的には) 管理者または (本当に必要な場合) エンドユーザーに対して管理対象外の属性を有効にする必要がある場合があります。ただし、このような属性名の使用は回避することを強く推奨します。
2.1.4. 必須アクションのプロファイル検証がデフォルトで有効 リンクのコピーリンクがクリップボードにコピーされました!
新しいレルムでは、必須アクション verify-profile
がデフォルトで有効になっています。ただし、以前のバージョンから移行した場合、既存レルムの verify-profile
アクションの状態は、以前と同じになります。以前のバージョンではデフォルトで無効であったため、通常は無効になります。この必須アクションの詳細は、ユーザープロファイルのドキュメント を参照してください。
2.1.5. ユーザープロファイルとレルムに基づいてページをレンダリングする Freemarker テンプレートの変更 リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、次のテンプレートが更新され、レルムに設定されたユーザープロファイル設定に基づいて属性を動的にレンダリングできるようになりました。
-
login-update-profile.ftl
-
register.ftl
-
update-email.ftl
これらのテンプレートは、それぞれ、更新プロファイル (ユーザーに対して必須アクション Update Profile が有効になっている場合)、登録、メール更新 (UPDATE_EMAIL 機能が有効になっている場合) ページのレンダリングを担当します。
カスタムテーマを使用してこれらのテンプレートを変更すれば、コンテンツのみが更新されるため、テンプレートが期待どおりに動作します。ただし、宣言型ユーザープロファイル を設定する方法を確認し、可能であればこの機能によって提供されるすべての機能を使用して組み込みテンプレートの変更を回避することを推奨します。
また、このリリースでは、同じフローのページをレンダリングするために declarative-user-profile
機能によって使用されるテンプレートが不要になったため、削除されました。
-
update-user-profile.ftl
-
register-user-profile.ftl
以前のリリースで、上記のテンプレートをカスタマイズして declarative-user-profile
機能を使用していた場合は、それに応じて login-update-profile.ftl
と register.ftl
を更新してください。
2.1.6. ブローカー経由で初めてログインしたときのプロファイル更新ページ用の新しい Freemarker テンプレート リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、ユーザーが idp-review-user-profile.ftl
テンプレートを使用して初めてブローカー経由で認証するときに、サーバーが更新プロファイルページをレンダリングします。
以前のリリースでは、最初のブローカーログインフロー中にプロファイルを更新するために使用されたテンプレートは login-update-profile.ftl
でした。これは、ユーザーがレルムに認証するときにプロファイルを更新するために使用されるものと同じでした。
同じテンプレートを共有するのではなく、各フローに個別のテンプレートを使用すると、どのフローにテンプレートが使用されるかがより明確に区別されます。ただし、特定のフローのページにのみ影響する予期しない変更や動作が発生する可能性があります。
ブローカー経由の認証時にユーザーがプロファイルを更新する方法をカスタマイズするために login-update-profile.ftl
テンプレートをカスタマイズした場合は、変更内容を新しいテンプレートに必ず移してください。
2.2. テーマの変更 リンクのコピーリンクがクリップボードにコピーされました!
2.2.1. ウェルカムテーマの変更 リンクのコピーリンクがクリップボードにコピーされました!
'ウェルカム' テーマが新しいレイアウトを使用するように更新されました。現在は PatternFly 3 ではなく PatternFly 5 を使用しています。テーマを拡張する場合、または独自のテーマを提供する場合は、次のように更新する必要がある場合があります。
2.2.1.1. PatternFly 3 から PatternFly 5 への移行 リンクのコピーリンクがクリップボードにコピーされました!
ウェルカムテーマは、Red Hat build of Keycloak の中で最も古いテーマの 1 つでした。元々は PatternFly 3 をベースにしていましたが、メジャーバージョンを 1 つスキップして PatternFly 5 を使用するように更新されました。カスタムテーマによって組み込みテーマを拡張する場合は、PatternFly 5 構文を使用するようにカスタムテーマを更新する必要があります。詳細は、PatternFly 5 のドキュメント を参照してください。
独自のカスタムテーマで PatternFly 3 をまだ使用している (組み込みテーマを拡張していない) 場合は、引き続き使用できます。ただし、PatternFly 3 のサポートは今後のリリースで削除されるため、できるだけ早く PatternFly 5 への移行を検討してください。
2.2.1.2. 管理コンソールへの自動リダイレクト リンクのコピーリンクがクリップボードにコピーされました!
管理コンソールが有効になっている場合は、管理ユーザーがすでに存在すると、ウェルカムページが自動的に管理コンソールにリダイレクトされます。この動作は、theme.properties
ファイルで redirectToAdmin
を設定することで変更できます。デフォルトでは、このプロパティーは false
に設定されていますが、組み込みテーマを拡張する場合は、このプロパティーを true
に設定します。
2.2.1.3. documentationUrl および displayCommunityLinks プロパティーの削除 リンクのコピーリンクがクリップボードにコピーされました!
これらのプロパティーは、以前はナビゲーション要素に使用されていましたが、現在は存在しません。組み込みテーマを拡張すると、これらのプロパティーは効果がなくなるため、theme.properties
ファイルから削除する必要があります。
2.2.1.4. アセットが 'common' リソースからロードされるようになる リンクのコピーリンクがクリップボードにコピーされました!
背景、ロゴ、ファビコンなどの画像が、テーマリソースではなく、'common' リソースからロードされるようになりました。このように変更されたため、組み込みテーマを拡張してこれらの画像を上書きする場合は、画像をテーマの 'common' リソースに移動し、theme.properties
ファイルを更新して新しいパスを含める必要があります。
This defaults to 'common/keycloak' if not set.
# This defaults to 'common/keycloak' if not set.
import=common/your-theme-name
2.2.2. Account Console テーマのカスタマイズの変更 リンクのコピーリンクがクリップボードにコピーされました!
以前に、現在非推奨の Account Console テーマのバージョン 2 を拡張していた場合は、新しい Account Console テーマのバージョン 3 を使用するようにテーマを更新する必要があります。Account Console テーマの新しいバージョンでは、カスタマイズ方法に関していくつかの変更が加えられています。最初から始めるには、新しい カスタマイズクイックスタート に従ってください。
カスタムテーマを移動するには、まず parent
を新しいテーマに変更します。
Before After
# Before
parent=keycloak.v2
# After
parent=keycloak.v3
カスタムの React コンポーネントがある場合は、相対パスを使用するのではなく、React を直接インポートします。
// Before import * as React from "../../../../common/keycloak/web_modules/react.js"; // After import React from "react";
// Before
import * as React from "../../../../common/keycloak/web_modules/react.js";
// After
import React from "react";
テーマのカスタマイズに content.json
を使用している場合は、ファイルの構造にいくつかの変更点があります。具体的には次の点です。
-
content
プロパティーの名前がchildren
に変更になりました。 -
id
、icon
、およびcomponentName
プロパティーが削除されました。modulePath
が同じ機能を提供しているためです。
2.2.3. テーマの言語ファイルのデフォルト設定が UTF-8 エンコード リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、リソースバンドルファイルを UTF-8 でエンコードすることを想定している Java 以降の標準メカニズムに準拠するようになりました。
以前のバージョンの Keycloak では、# encoding: UTF-8
のようなコメントを使用して最初の行にエンコーディングを指定することがサポートされていました。これはサポートされなくなり、無視されます。
テーマのメッセージプロパティーファイルが UTF-8 エンコードで読み取られるようになり、自動的に ISO-8859-1 エンコードにフォールバックされます。別のエンコードを使用している場合は、ファイルを UTF-8 に変換してください。
2.3. Operator の変更 リンクのコピーリンクがクリップボードにコピーされました!
2.3.1. Operator が参照するリソースのポーリング リンクのコピーリンクがクリップボードにコピーされました!
Keycloak CR 経由で参照される Secret と ConfigMap は、API サーバーによって監視されるのではなく、変更をポーリングされるようになりました。このポーリングでは、変更が検出されるまでに 1 分かかる場合があります。
この変更は、これらのリソースに対するラベル操作の必要性を回避するために行われました。アップグレード後、Secret にまだ operator.keycloak.org/component ラベルが付いている場合は、削除または無視される可能性があります。
2.3.2. Operator のカスタマイズプロパティーキー リンクのコピーリンクがクリップボードにコピーされました!
Operator が詳細設定に使用するプロパティーキーが、operator.keycloak
から kc.operator.keycloak
に変更になりました。
2.3.3. Operator の -secrets-store Secret リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンの Operator は、監視対象の Secret を追跡するために Secret を作成していました。新しいバージョンの Operator は、-secrets-store Secret を使用しなくなったため、この Secret は削除できます。
2.4. Keycloak CR の変更 リンクのコピーリンクがクリップボードにコピーされました!
2.4.1. Keycloak CR の resources オプション リンクのコピーリンクがクリップボードにコピーされました!
Keycloak CR および KeycloakRealmImport CR で resources
オプションが指定されていないと、デフォルト値が使用されます。Keycloak デプロイメントおよびレルムインポートジョブのデフォルトの requests
メモリーは 1700MiB
に設定され、limits
メモリーは 2GiB
に設定されます。
2.4.2. デフォルトの Keycloak CR ホスト名 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift 上で実行する場合は、Ingress が有効で、spec.ingress.classname が openshift-default に設定されている場合、Keycloak CR の spec.hostname.hostname を未設定のままにしておくことができます。Operator は、明示的なホストのない OpenShift ルートによって作成されるホスト名と同様に、保存されたバージョンの CR にデフォルトのホスト名 ingress-namespace.appsDomain を割り当てます。appsDomain を変更した場合、または何らかの理由で別のホスト名が必要な場合は、Keycloak CR を更新してください。
2.5. 機能の変更 リンクのコピーリンクがクリップボードにコピーされました!
--features
リストと --features-disabled
リストの両方に同じ機能を指定することができなくなりました。機能は 1 つのリストにのみ指定できます。
--features
リストで docker
などのバージョンなしの機能名を使用すると、サポート期間が最も長い最新の機能バージョンを有効にできます。リリースに関する動作をより予測可能なものにする必要がある場合は、代わりに docker:v1
などの特定のバージョンを参照してください。
2.6. その他の変更点 リンクのコピーリンクがクリップボードにコピーされました!
2.6.1. カスタムユーザー属性インデックスの削除 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー属性でユーザーを検索する場合、Red Hat build of Keycloak は、強制的に小文字の比較がされるようにし、ユーザー属性名が検索されなくなりました。この変更により、ユーザー属性テーブルの Red Hat build of Keycloak のネイティブインデックスが検索時に使用されます。検索を迅速化するために、下層(name)
に基づいて独自のインデックスを作成した場合は、これを削除できます。
2.6.2. Admin API コンテキストと Account コンテキストの両方におけるユーザー表現の変更 リンクのコピーリンクがクリップボードにコピーされました!
org.keycloak.representations.idm.UserRepresentation
と org.keycloak.representations.account.UserRepresentation
の両方の表現クラスが変更されました。これにより、ルートユーザー属性 (username
、email
、firstName
、lastName
、locale
など) が、それぞれ Admin API と Account API から表現ペイロードを取得または送信するときに一貫した表現を使用するようになりました。
username
、email
、firstName
、lastName
、locale
属性が、新しい org.keycloak.representations.idm.AbstractUserRepresentation
ベースクラスに移動しました。
なお、getAttributes
メソッドはカスタム属性のみを表すことを目的としたものです。そのため、このメソッドによって返されるマップにルート属性が含まれることを期待しないでください。このメソッドは主に、特定のユーザーのカスタム属性を更新または取得するクライアントを対象としています。
ルート属性を含むすべての属性を解決するために、新しい getRawAttributes
メソッドが追加されました。これにより、結果のマップにルート属性も含まれるようになりました。ただし、このメソッドは表現ペイロードからは利用できません。ユーザープロファイルを管理するときにサーバーによって使用されることを目的としたものです。
2.6.3. ビルド時のオプションの https-client-auth リンクのコピーリンクがクリップボードにコピーされました!
オプション https-client-auth
は、実行時のオプションとして扱われていましたが、これは Quarkus ではサポートされていません。代わりに、このオプションはビルド時に処理する必要があります。
2.6.4. オフラインセッションとリモートセッションの順次ロード リンクのコピーリンクがクリップボードにコピーされました!
このリリースから、Red Hat build of Keycloak クラスターの最初のメンバーが、リモートセッションを並行してではなく順番にロードするようになります。オフラインセッションのプリロードが有効になっている場合は、それらも順番にロードされます。
以前のコードでは、起動時にクラスター全体でリソース消費量が多くなり、実稼働環境での分析が困難で、ロード中にノードが再起動した場合に複雑な障害が発生する可能性がありました。そのため、セッションの順次ロードに変更になりました。
このバージョンおよび以前のバージョンの Red Hat build of Keycloak では、デフォルトでオフラインセッションをオンデマンドでロードします。これにより、オフラインセッションが多数ある場合は、それらを並行してプリロードするよりもスケーラビリティーが向上します。このデフォルト設定を使用するセットアップは、オフラインセッションのロードストラテジーの変更による影響を受けません。オフラインセッションの事前ロードが有効なセットアップは、オフラインセッションのプリロードが無効なセットアップに移行する必要があります。
2.6.5. Infinispan メトリクスがキャッシュマネージャーとキャッシュ名のラベルを使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak の組み込みキャッシュのメトリクスを有効にしたときに、メトリクスがキャッシュマネージャーとキャッシュ名のラベルを使用するようになりました。
ラベルのない古いメトリクスの例
vendor_cache_manager_keycloak_cache_sessions_statistics_approximate_entries_in_memory{cache="sessions",node="..."}
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="..."}
vendor_statistics_approximate_entries_in_memory{cache="sessions",cache_manager="keycloak",node="..."}
インストールに対する変更を元に戻すには、カスタム Infinispan XML 設定を使用して、次のように設定を変更します。
<metrics names-as-tags="false" />
<metrics names-as-tags="false" />
2.6.6. ユーザー属性値の長さの拡張 リンクのコピーリンクがクリップボードにコピーされました!
このリリース以降、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.6.1. LDAP の追加移行手順 リンクのコピーリンクがクリップボードにコピーされました!
これは、以下のすべての条件を満たすインストールが対象です。
- LDAP ディレクトリー内のユーザー属性が 2048 文字を超えているか、バイナリー属性が 1500 バイトを超えている。
- 管理者またはユーザーが、管理コンソール、API、またはアカウントコンソールを介して属性を変更する。
UI および REST API を介してこれらの属性を変更できるようにするには、次の手順を実行します。
- 上記で特定された属性を、レルムのユーザープロファイルで管理対象の属性として宣言します。
-
前のステップで追加した各属性に対して、属性値の必要な最小長と最大長を指定して
length
バリデーターを定義します。バイナリー値の場合は、Red Hat build of Keycloak 内部のバイナリー値 base64 エンコーディング用のオーバーヘッドとして、予想されるバイナリー長に 33 パーセントを追加します。
2.6.6.2. カスタムのユーザーストレージプロバイダーの追加移行手順 リンクのコピーリンクがクリップボードにコピーされました!
これは、以下のすべての条件を満たすインストールが対象です。
- Red Hat build of Keycloak のデータベースとして MariaDB または MySQL を実行している。
-
テーブル
FED_USER_ATTRIBUTE
のエントリーのVALUE
列に 2048 文字を超える内容が含まれている。このテーブルは、フェデレーションが有効になっているカスタムユーザープロバイダーに使用されます。 - 管理者またはユーザーが、管理コンソールまたはアカウントコンソールを介して長い属性を変更する。
UI および REST API を介してこれらの属性を変更できるようにするには、次の手順を実行します。
- 上記で特定された属性を、レルムのユーザープロファイルで管理対象の属性として宣言します。
-
前のステップで追加した各属性に対して、属性値の必要な最小長と最大長を指定して
length
バリデーターを定義します。
2.6.7. Admin send-verify-email API が同じメール検証テンプレートを使用 リンクのコピーリンクがクリップボードにコピーされました!
PUT /admin/realms/{realm}/users/{id}/send-verify-email
PUT /admin/realms/{realm}/users/{id}/send-verify-email
このリリースでは、この API は executeActions.ftl
の代わりに email-verification.ftl
テンプレートを使用します。
アップグレード前
Perform the following action(s): Verify Email
Perform the following action(s): Verify Email
アップグレード後
Confirm validity of e-mail address email@example.org.
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"]
PUT /admin/realms/{realm}/users/{id}/execute-actions-email
["VERIFY_EMAIL"]
2.6.8. パスワードハッシュ化の変更 リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、パスワードハッシュ化のデフォルトを、パスワード保存に関する OWASP の推奨事項 に合わせて調整しました。
この変更の一環として、デフォルトのパスワードハッシュ化プロバイダーが pbkdf2-sha256
から pbkdf2-sha512
に変更になりました。また、pbkdf2
ベースのパスワードハッシュ化アルゴリズムのデフォルトハッシュ反復回数が次のように変更になりました。
プロバイダー ID | アルゴリズム | 以前の反復回数 | 新しい反復回数 |
---|---|---|---|
|
| 20.000 | 1.300.000 |
|
| 27.500 | 600.000 |
|
| 30.000 | 210.000 |
レルムが hashAlgorithm
と hashIterations
を使用してパスワードポリシーを明示的に設定していない場合、新しい設定は次回のパスワードベースのログイン時、またはユーザーパスワードが作成または更新されたときに有効になります。
2.6.8.1. 新しいパスワードハッシュ化設定のパフォーマンス リンクのコピーリンクがクリップボードにコピーされました!
Intel i9-8950HK CPU (12) @ 4.800GHz を搭載したマシンでのテストで、1000 個のパスワードをハッシュ化した場合は、次の時間差が得られました (3 回の実行の平均)。なお、PBKDF2WithHmacSHA1
の平均所要時間は、実行時間が長いため、より少ない数のパスワードで計算されました。
プロバイダー ID | アルゴリズム | 以前の所要時間 | 新しい所要時間 | 差 |
---|---|---|---|---|
|
| 122 ms | 3.114 ms | +2.992 ms |
|
| 20 ms | 451 ms | +431 ms |
|
| 33 ms | 224 ms | +191 ms |
pbkdf2
プロバイダーのユーザーは、許容できるパフォーマンスを再び得るために、ハッシュ反復回数を明示的に減らす必要がある場合があります。これは、レルムのパスワードポリシーでハッシュ反復回数を明示的に設定することによって実行できます。
2.6.8.2. 全体的な CPU 使用率の増加とデータベースアクティビティーの一時的な増加が予想されることについて リンクのコピーリンクがクリップボードにコピーされました!
Red Hat のテストでは、パスワードベースのログインあたりの CPU 使用率が 5 倍に増加しました。この値には、変更されたパスワードハッシュ化と変更されていない TLS 接続処理の両方が含まれます。アクセストークンとクライアントクレデンシャルグラントの更新など、Red Hat build of Keycloak による平均化効果により、全体的な CPU 使用率の増加は 2 - 3 倍程度になるはずです。ただし、これはインストールの固有のワークロードによって異なります。
アップグレード後、パスワードベースのログイン中に、ユーザーのパスワードが、新しいハッシュアルゴリズムとハッシュ反復回数を使用して 1 回限りのアクティビティーとして再ハッシュ化され、データベースで更新されます。これにより、Red Hat build of Keycloak の内部キャッシュからユーザーがクリアされるため、データベースレベルでの読み取りアクティビティーも増加します。このようなデータベースアクティビティーの増加は、再ハッシュ化されたユーザーのパスワードが増えるにつれて、次第に減少します。
2.6.8.3. 古い pbkdf2-sha256 パスワードハッシュ化の使用を続ける方法 リンクのコピーリンクがクリップボードにコピーされました!
レルムの古いパスワードハッシュ化を保持するには、レルムパスワードポリシーで hashAlgorithm
と hashIterations
を明示的に指定します。
-
Hashing Algorithm: pbkdf2-sha256
-
Hashing Iterations: 27500
2.6.9. 移行用の 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.10. 一時的なロックアウトログのイベントへの置き換え リンクのコピーリンクがクリップボードにコピーされました!
ブルートフォースプロテクターによってユーザーが一時的にロックアウトされた場合に、新しいイベント USER_DISABLED_BY_TEMPORARY_LOCKOUT
が発生するようになりました。新しいイベントは情報を構造化された形式で提供するため、ID KC-SERVICES0053
のログは削除されました。
これは成功イベントであるため、新しいイベントはデフォルトで DEBUG
レベルでログに記録されます。すべての成功イベントのログレベルを変更するには、サーバー管理ガイドのイベントリスナーの章 で説明されているように、spi-events-listener-jboss-logging-success-level
設定を使用します。
カスタムアクションまたはカスタムログエントリーをトリガーするには、サーバー開発者ガイド のイベントリスナー SPI の説明に従って、カスタムイベントリスナーを作成します。
2.6.11. Keycloak JS インポートを更新する必要性 リンクのコピーリンクがクリップボードにコピーされました!
Keycloak JS を Red Hat build of Keycloak から直接ロードする場合は、このセクションを無視しても問題ありません。NPM パッケージから Keycloak JS をロードし、Webpack、Vite などのバンドラーを使用している場合は、コードにいくつかの変更を加える必要がある可能性があります。Keycloak JS パッケージは、package.json ファイルの exports
フィールド を使用するようになりました。つまり、インポートを変更する必要がある可能性があります。
2.6.12. HS256 から HS512 への内部アルゴリズムの変更 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak が内部トークン (Red Hat build of Keycloak 自体によって消費される JWT、たとえばリフレッシュトークンやアクショントークン) に署名するために使用するアルゴリズムが、HS256
からよりセキュアな HS512
に変更されます。hmac-generated-hs512
という名前の新しいキープロバイダーがレルムに追加されました。移行されたレルムでは、古い hmac-generated
プロバイダーと古い HS256
キーが維持され、アップグレード前に発行されたトークンが引き続き検証されることに注意してください。古いトークンが存在しなくなったら、鍵のローテーションガイドライン に従って、HS256
プロバイダーを手動で削除できます。
2.6.13. 部コンテナー内で実行する場合の異なる JVM メモリー設定 リンクのコピーリンクがクリップボードにコピーされました!
コンテナー内で実行する場合の JVM オプション -Xms
および -Xmx
が、-XX:InitialRAMPercentage
と -XX:MaxRAMPercentage
に置き換えられました。Red Hat build of Keycloak は、静的な最大ヒープサイズ設定ではなく、コンテナーメモリーの合計の 70% に最大値を指定します。
ヒープサイズはコンテナーの合計メモリーに基づいて動的に計算されるため、コンテナーの メモリー制限を必ず設定 してください。
メモリー制限が設定されていない場合は、最大ヒープサイズがコンテナーメモリーの合計の 70% まで増加するため、メモリー消費量が急激に増加します。
詳細は、異なるメモリー設定を指定する を参照してください。
2.6.14. 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.15. ワイルドカード文字の処理 リンクのコピーリンクがクリップボードにコピーされました!
JPA では検索時にワイルドカード %
と _
を使用できますが、LDAP などの他のプロバイダーでは *
のみを使用できます。*
は、LDAP では自然なワイルドカード文字であるため、すべての場所で機能しますが、JPA では検索文字列の先頭と末尾でのみ機能していました。このリリース以降、ワイルドカード文字 *
だけが、検索文字列内のすべての場所で、すべてのプロバイダーで一貫して機能するようになりました。JPA の %
や _
など、特定のプロバイダー内のすべての特殊文字はエスケープされます。引用符を追加した完全一致検索 (例: "w*ord"
) の動作は、以前のリリースと同じままです。
2.6.16. レルムおよびクライアントロールマッパーによってマッピングされたクレームの値形式の変更 リンクのコピーリンクがクリップボードにコピーされました!
このリリースより前は、Multivalued
設定が無効になっていると、レルム (User Realm Role
) とクライアント (User Client Role
) の両方のプロトコルマッパーが、文字列化された JSON 配列をマッピングしていました。
しかし、Multivalued
設定は、クレームをリストとしてマッピングするか、同じ値リストからの単一の値のみをマッピングするか (設定が無効な場合) を示すものです。
このリリースでは、ロールマッパーとクライアントマッパーが、単一値とマークされている場合 (Multivalued
が無効な場合) に、ユーザーの有効なロールからの単一の値にマッピングされるようになりました。
2.6.17. ログイン 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;"/>
<input type="password" id="password" name="password" autocomplete="current-password" style="display:none;"/>
新しいコードの例:
2.6.18. 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
このような場合は、代わりに単一のエスケープを使用してください。
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 start --help
bin/kc.sh start --help
同様に、以下は使用できなくなりました。
bin/kc.sh build "--db postgres"
bin/kc.sh build "--db postgres"
個別の引数を使用する必要があります。
bin/kc.sh build --db postgres
bin/kc.sh build --db postgres
Dockerfile 実行コマンドでも個別の引数の使用が必要です。
2.6.19. GroupProvider の変更 リンクのコピーリンクがクリップボードにコピーされました!
最上位レベルのグループを検索して参照できるようにする新しいメソッドが追加されました。このインターフェイスを実装する場合は、次のメソッドを実装する必要があります。
Stream<GroupModel> getTopLevelGroupsStream(RealmModel realm, String search, Boolean exact, Integer firstResult, Integer maxResults)
Stream<GroupModel> getTopLevelGroupsStream(RealmModel realm,
String search,
Boolean exact,
Integer firstResult,
Integer maxResults)
2.6.20. GroupRepresentation の変更 リンクのコピーリンクがクリップボードにコピーされました!
-
特定のグループに含まれるサブグループの数をクライアントに通知するための新しいフィールド
subGroupCount
が追加されました。 -
subGroups
リストが、階層データを要求するクエリーでのみ入力されるようになりました。 -
このフィールドは "下から上" へ入力されるため、グループのすべてのサブグループを取得するために使用することはできません。
GroupProvider
を使用するか、GET {keycloak server}/realms/{realm}/groups/{group_id}/children
からサブグループを要求してください。
2.6.21. Group Admin API の新しいエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
ページネーションをサポートする特定のグループのサブグループを取得する方法として、エンドポイント GET {keycloak server}/realms/{realm}/groups/{group_id}/children
が追加されました。
2.6.22. RESTEasy リアクティブ リンクのコピーリンクがクリップボードにコピーされました!
RESTEasy Classic が利用不可になり、選択することができなくなりました。RESTEasy Classic および org.jboss.resteasy.spi.*
に含まれる関連パッケージに依存している SPI およびコードは、移行が必要になります。
2.6.23. 部分エクスポートに manage-realm 権限が必要 リンクのコピーリンクがクリップボードにコピーされました!
エンドポイント POST {keycloak server}/realms/{realm}/partial-export
と、管理コンソールの対応するアクションの実行に必要な権限が、view-realm
ではなく manage-realm
になりました。このエンドポイントはレルム設定を JSON ファイルにエクスポートするものであるため、新しい権限のほうが適切です。パラメーター exportGroupsAndRoles
と exportClients
は、同じ権限 (query-groups
と view-clients
) を引き続き管理します。これらのパラメーターは、それぞれレルムグループ/ロールとクライアントをエクスポートに追加します。
2.6.24. クライアントの有効なリダイレクト URI を常に厳密な文字列照合により比較 リンクのコピーリンクがクリップボードにコピーされました!
バージョン 1.8.0 で、リダイレクト URI をクライアントの指定された有効なリダイレクトと比較する際に、ホスト名とスキームに小文字が導入されました。ただし、これはすべてのプロトコルで完全に機能したわけではありません。たとえば、ホストが http
では小文字で、https
では小文字ではない場合がありました。OAuth 2.0 セキュリティーの現在のベストプラクティス では、厳密な文字列照合を使用して URI を比較するよう推奨しています。そのため、Red Hat build of Keycloak はこの推奨事項に従い、現時点では、ホスト名とスキームについても、大文字と小文字を厳密に区別して有効なリダイレクトを比較しています。
古い動作に依存しているレルムの場合は、クライアントの有効なリダイレクト URI に、サーバーによって認識される URI ごとに個別のエントリーが保持されるようになりました。
クライアントを設定する際の手順と詳細度は増加しますが、新しい動作により、よりセキュアなデプロイメントが可能になります。パターンベースのチェックがセキュリティー問題の原因となることが多いためです。チェックの実装方法だけでなく、設定方法も原因となります。
2.6.25. Groups.getSubGroups の briefRepresentation パラメーターの処理を修正 リンクのコピーリンクがクリップボードにコピーされました!
バージョン 23.0.0 で、Groups リソースに新しいエンドポイント getSubGroups ("children") が導入されましたが、パラメーターの briefRepresentation が、サブグループの完全な表現を取得することを意味していました。この意味が、短い表現を返すように変更になりました。
2.6.26. jboss-logging イベントメッセージの変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-logging
メッセージの値が、引用符 (デフォルトでは文字 "
) で囲まれ、改行を防ぐためにサニタイズされるようになりました。プロバイダーに、新しい動作をカスタマイズできる 2 つの新しいオプション (spi-events-listener-jboss-logging-sanitize
と spi-events-listener-jboss-logging-quotes
) があります。たとえば、サニタイズと引用符の付加の両方を回避するには、次のようにしてサーバーを起動します。
./kc.sh start --spi-events-listener-jboss-logging-sanitize=false --spi-events-listener-jboss-logging-quotes=none ...
./kc.sh start --spi-events-listener-jboss-logging-sanitize=false --spi-events-listener-jboss-logging-quotes=none ...
オプションの詳細は、すべてのプロバイダー設定 を参照してください。
2.7. 非推奨の機能と削除された機能 リンクのコピーリンクがクリップボードにコピーされました!
2.7.1. トラストストアの非推奨化 リンクのコピーリンクがクリップボードにコピーされました!
spi-truststore-file-*
オプションとトラストストア関連のオプション https-trust-store-*
が非推奨になりました。そのため、トラストストアマテリアルの新しいデフォルトの場所である conf/truststores
を使用するか、truststore-paths
オプションを使用して目的のパスを指定してください。詳細は、送信要求用の信頼済み証明書の設定 を参照してください。
spi-truststore-file-hostname-verification-policy
プロパティーの代わりに tls-hostname-verifier
プロパティーを使用する必要があります。
変更の副次的な影響として、トラストストアプロバイダーが常に何らかの証明書で設定されるようになりました (少なくとも、デフォルトの Java 信頼済み証明書が存在します)。この新しい動作は、Red Hat build of Keycloak の他の部分に影響を与える可能性があります。
たとえば、attestation conveyance が Direct 検証に設定されている場合は、webauthn 登録が失敗する可能性があります。以前は、トラストストアプロバイダーが設定されていないと、受信証明書が検証されませんでした。しかし、現在ではこの検証は常に実行されます。この登録は invalid cert path
エラーで失敗します。ドングルによって送信された証明書チェーンが Red Hat build of Keycloak によって信頼されていないためです。アテステーションを正しく実行するには、オーセンティケーターの認証局がトラストストアプロバイダーに存在している必要があります。
2.7.2. --proxy オプションの非推奨化 リンクのコピーリンクがクリップボードにコピーされました!
--proxy
オプションは非推奨となり、今後のリリースで削除される予定です。次の表に、非推奨のオプションとサポートされているオプションの対応関係を示します。
非推奨の使用法 | 新しい使用法 |
---|---|
|
|
|
|
|
|
|
|
|
|
セキュリティーを強化するため、--proxy-headers
オプションでは、forwarded
値と xforwarded
値の両方を同時に選択することはできません (以前の --proxy edge
および --proxy reencrypt
の場合と同様)。
プロキシーヘッダーオプションを使用する場合は、リバースプロキシーによって Forwarded
ヘッダーまたは X-Forwarded-*
ヘッダーが適切に設定および上書きされることを確認してください。これらのヘッダーを設定するには、リバースプロキシーのドキュメントを参照してください。設定を誤ると、Red Hat build of Keycloak がセキュリティー上の脆弱性にさらされることになります。
Operator を使用するときにプロキシーヘッダーを設定することもできます。
proxy.headers
フィールドが指定されていない場合、Operator はデフォルトで proxy=passthrough
を暗黙的に設定して、以前の動作にフォールバックします。これにより、サーバーログに非推奨の警告が記録されます。このフォールバックは今後のリリースで削除される予定です。
2.7.3. オフラインセッションのプリロードの非推奨化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のデフォルトの動作では、オンデマンドでオフラインセッションをロードします。起動時にオフラインセッションをプリロードするという従来の動作は、非推奨になりました。起動時にプリロードすると、セッション数の増加に応じて適切にスケールすることができず、Red Hat build of Keycloak のメモリー使用量が増加するためです。古い動作は今後のリリースで削除される予定です。
非推奨でまだ削除されていない古い動作を再度有効にするには、次に示すように機能フラグと SPI オプションを使用します。
bin/kc.[sh|bat] start --features-enabled offline-session-preloading --spi-user-sessions-infinispan-preload-offline-sessions-from-database=true
bin/kc.[sh|bat] start --features-enabled offline-session-preloading --spi-user-sessions-infinispan-preload-offline-sessions-from-database=true
UserSessionProvider
の API で、メソッド getOfflineUserSessionByBrokerSessionId (RealmModel レルム、String brokerSessionId)
が非推奨になりました。このメソッドの代わりに、getOfflineUserSessionByBrokerUserIdStream (RealmModel、String brokerUserId)
を使用して、ユーザーのセッションを取得してから、必要に応じてブローカーセッション ID でそれらをフィルタリングします。
2.7.4. データプロバイダーおよびモデルのメソッドの非推奨化 リンクのコピーリンクがクリップボードにコピーされました!
-
RealmModel#getTopLevelGroupsStream()
およびオーバーロードされたメソッドの非推奨化
2.7.5. Cookie の非推奨化と削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak での Cookie 処理のリファクタリングの一環として、Cookie の設定方法にいくつか変更が加えられています。
- 要求がセキュアなコンテキストを介して行われる場合は、すべての Cookie にセキュア属性が設定されるようになりました。
-
WELCOME_STATE_CHECKER
Cookie がSameSite=Strict
に設定されるようになりました。
カスタムエクステンションの場合は、いくつかの変更が必要になることがあります。
-
LocaleSelectorProvider.KEYCLOAK_LOCALE
は、Cookie が CookieProvider を通じて管理されるようになったため、非推奨になりました。 -
HttpResponse.setWriteCookiesOnTransactionComplete
が削除されました。 -
HttpCookie
が非推奨になりました。代わりにNewCookie.Builder
を使用してください。 -
ServerCookie
が非推奨になりました。代わりにNewCookie.Builder
を使用してください。
2.7.6. SAML 暗号化の非推奨モードの削除 リンクのコピーリンクがクリップボードにコピーされました!
バージョン 21 で導入された SAML 暗号化の互換モードが削除されました。システムプロパティー keycloak.saml.deprecated.encryption
が、サーバーによって管理されなくなりました。暗号化に古い署名鍵をまだ使用しているクライアントは、新しい IDP 設定メタデータから署名鍵を更新する必要があります。
2.7.7. モデルモジュールの名前変更 リンクのコピーリンクがクリップボードにコピーされました!
マップストアの削除後に、次のモジュールの名前が変更になりました。
-
org.keycloak:keycloak-model-legacy-private
をorg.keycloak:keycloak-model-storage-private
に変更 -
org.keycloak:keycloak-model-legacy-services
をorg.keycloak:keycloak-model-storage-services
に変更
org.keycloak:keycloak-model-legacy
モジュールが非推奨になりました。次のリリースで org.keycloak:keycloak-model-storage
モジュールに置き換えられて削除される予定です。
2.7.8. RegistrationProfile フォームアクションの削除 リンクのコピーリンクがクリップボードにコピーされました!
フォームアクション RegistrationProfile
(認証フローの UI では Profile Validation
として表示されます) がコードベースから削除され、すべての認証フローからも削除されました。これはデフォルトですべてのレルムの組み込み登録フローに含まれていました。ユーザー属性の検証と、そのユーザーのすべての属性を含むユーザーの作成は、RegistrationUserCreation
フォームアクションによって処理されるため、RegistrationProfile
は不要になります。独自のプロバイダーで RegistrationProfile
クラスを使用していない限り、通常、この変更に関するさらなる対処は不要です。
2.7.9. 管理ユーザー API を通じてユーザーを更新する際のユーザー属性の部分的な更新がサポート対象外に リンクのコピーリンクがクリップボードにコピーされました!
管理ユーザー API を介してユーザー属性を更新する場合は、username
、email
、firstName
、lastName
などのルート属性を含むユーザー属性を更新するときに、部分的な更新ができません。
2.7.10. 非推奨の auto-build CLI オプションの削除 リンクのコピーリンクがクリップボードにコピーされました!
auto-build
CLI オプションは、長い間、非推奨とマークされていました。このリリースで完全に削除され、サポートされなくなりました。
start
コマンドを実行すると、設定に基づいてサーバーが自動的に構築されます。この動作を防ぐには、--optimized
フラグを設定します。
2.7.11. イベントの詳細の長さを短縮するオプションの削除 リンクのコピーリンクがクリップボードにコピーされました!
このリリース以降、Keycloak は EventEntity
詳細列の長い値をサポートします。そのため、イベントの詳細の長さを短縮するためのオプション --spi-events-store-jpa-max-detail-length
および --spi-events-store-jpa-max-field-length
がサポートされなくなりました。
2.7.12. 翻訳からの名前空間の削除 リンクのコピーリンクがクリップボードにコピーされました!
すべての翻訳を admin-ui の 1 つのファイルに移動しました。独自の翻訳を作成したり、admin-ui を拡張したりした場合は、この新しい形式に移行する必要があります。また、データベースに "オーバーライド" がある場合は、キーから名前空間を削除する必要があります。一部のキーは名前空間を除いて同じです。これが最もわかりやすいのは help です。このような場合には、キーの末尾に Help
が付いています。
必要に応じて、次のノードスクリプトを使用して移行に役立てることができます。このスクリプトは、すべての単一ファイルを取得して新しいファイルに格納し、さらにマッピングの一部を処理します。
これを public/locale/<language>
フォルダー内の transform.mjs
というファイルに保存し、次のコマンドで実行します。
node ./transform.mjs
node ./transform.mjs
これでは完全な変換を実行できない可能性がありますが、それに非常に近いものになります。
第3章 Red Hat build of Keycloak サーバーのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
アダプターをアップグレードする前にサーバーをアップグレードします。
3.1. アップグレードの準備 リンクのコピーリンクがクリップボードにコピーされました!
サーバーをアップグレードする前に、次の手順を実行します。
手順
- 設定やテーマなどの古いインストールをバックアップします。
-
開いているトランザクションを処理し、
data/tx-object-store/
トランザクションディレクトリーを削除します。 お使いのリレーショナルデータベースのドキュメントの説明に従い、データベースをバックアップします。
サーバーをアップグレードすると、データベースは古いサーバーと互換性がなくなります。アップグレードを元に戻す必要がある場合は、まず古いインストールを復元してから、バックアップコピーからデータベースを復元します。
Red Hat build of Keycloak をアップグレードすると、オフラインユーザーセッションを除いて、ユーザーセッションが失われます。ユーザーは再度ログインする必要があります。
3.2. Red Hat build of Keycloak のダウンロード リンクのコピーリンクがクリップボードにコピーされました!
アップグレードの準備が整ったら、サーバーをダウンロードできます。
手順
Red Hat build of Keycloak の Web サイトから rhbk-26.0.10.zip をダウンロードして展開します。
このファイルを展開すると、
rhbk-26.0.10
という名前のディレクトリーが作成されます。- このディレクトリーを希望の場所に移動します。
-
conf/
、providers/
、themes/
を以前のインストールから新規インストールにコピーします。
3.3. データベースの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、データベーススキーマを自動的に移行することも、手動で移行することもできます。デフォルトでは、新規インストールを初めて起動すると、データベースが自動的に移行されます。
3.3.1. リレーショナルデータベースの自動移行 リンクのコピーリンクがクリップボードにコピーされました!
自動移行を実行するには、目的のデータベースに接続されているサーバーを起動します。新しいサーバーバージョンでデータベーススキーマが変更すると、データベースのレコード数が多すぎない限り、移行が自動的に開始されます。
たとえば、数百万件のレコードを含むテーブルにインデックスを作成すると、時間がかかり、サービスの大きな中断を引き起こす可能性があります。したがって、自動移行には 300000
レコードのしきい値が存在します。レコード数がこのしきい値を超えると、インデックスは作成されません。代わりに、手動で適用できる SQL コマンドを含む警告がサーバーログに表示されます。
しきい値を変更するには、connections-liquibase
プロバイダーの値である index-creation-threshold
プロパティーを設定します。
kc.[sh|bat] start --spi-connections-liquibase-quarkus-index-creation-threshold=300000
kc.[sh|bat] start --spi-connections-liquibase-quarkus-index-creation-threshold=300000
3.3.2. 手動によるリレーショナルデータベース移行 リンクのコピーリンクがクリップボードにコピーされました!
データベーススキーマを手動でアップグレードするには、デフォルトの connections-jpa
プロバイダーの migration-strategy
プロパティー値を "manual" に設定します。
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-strategy=manual
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-strategy=manual
この設定でサーバーを起動すると、サーバーはデータベースを移行する必要があるか確認します。必要な変更は bin/keycloak-database-update.sql
SQL ファイルに書き込まれます。このファイルを確認してデータベースに対して手動で実行できます。
エクスポートされた SQL ファイルのパスと名前を変更するには、デフォルトの connections-jpa
プロバイダーの migration-export
プロパティーを設定します。
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-export=<path>/<file.sql>
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-export=<path>/<file.sql>
このファイルをデータベースに適用する方法の詳細は、使用しているリレーショナルデータベースのドキュメントを参照してください。変更がファイルに書き込まれると、サーバーは終了します。
3.4. テーマの移行 リンクのコピーリンクがクリップボードにコピーされました!
カスタムテーマを作成した場合は、そのテーマを新しいサーバーに移行する必要があります。また、カスタマイズした部分によっては、組み込みテーマへの変更をカスタムテーマに反映することが必要になる場合があります。
手順
-
カスタムテーマを古いサーバーの
themes
ディレクトリーから新しいサーバーのthemes
ディレクトリーにコピーします。 次のセクションを使用して、テンプレート、メッセージ、およびスタイルを移行します。
- 移行の変更 に挙げられている更新されたテンプレートのいずれかをカスタマイズした場合は、ベーステーマのテンプレートと比較して、適用する必要のある変更があるかどうかを確認します。
- メッセージをカスタマイズした場合は、キーまたは値を変更したり、追加のメッセージを追加したりする必要がある場合があります。
- スタイルをカスタマイズ済みで、Red Hat build of Keycloak のテーマを拡張する場合は、スタイルの変更を確認します。ベーステーマを拡張する場合は、この手順をスキップできます。
3.4.1. テンプレートの移行 リンクのコピーリンクがクリップボードにコピーされました!
テンプレートをカスタマイズした場合は、新しいバージョンを確認して、カスタマイズしたお使いのテンプレートを更新するかどうかを決定します。軽微な変更を加えた場合は、更新されたテンプレートとカスタマイズしたテンプレートを比較することを推奨します。ただし、多くの変更を加えた場合は、新しいテンプレートとお使いのカスタマイズしたテンプレートを比較することを検討してください。この比較により、どのような変更を加える必要があるかがわかります。
差分ツールを使用してテンプレートを比較できます。次のスクリーンショットは、Login テーマの info.ftl
テンプレートとカスタムテーマの例を比較したものです。
更新バージョンの Login テーマテンプレートとカスタムの Login テーマテンプレートの比較
この比較から、1 つ目の変更点 (Hello world!!
) はカスタマイズであり、2 つ目の変更点 (if pageRedirectUri
) はベーステーマの変更点であることがわかります。2 つ目の変更点をカスタムテンプレートにコピーすると、カスタマイズしたテンプレートが正常に更新されます。
別の方法として、次のスクリーンショットは、古いインストールの info.ftl
テンプレートと新しいインストールの更新された info.ftl
テンプレートを比較したものです。
古いインストールの Login テーマテンプレートと更新された Login テーマテンプレート
この比較から、ベーステンプレートの変更点がわかります。これをもとに、変更したテンプレートに同じ変更を手動で加えることができます。この方法はより複雑であるため、最初の方法が実行不可能な場合にのみ使用してください。
3.4.2. メッセージの移行 リンクのコピーリンクがクリップボードにコピーされました!
別の言語のサポートを追加した場合は、上記の変更点をすべて適用する必要があります。別の言語のサポートを追加していない場合は、何も変更する必要がない可能性があります。テーマ内の影響を受けるメッセージを変更した場合にのみ、変更を加える必要があります。
手順
- 追加された値は、ベーステーマのメッセージ値を確認し、メッセージをカスタマイズする必要があるかどうかを判断します。
- 名前が変更された鍵の場合は、カスタムテーマのキーの名前を変更します。
- 変更された値は、ベーステーマの値を確認して、カスタムテーマに変更を加えなければならないかどうかを判断します。
3.4.3. スタイルの移行 リンクのコピーリンクがクリップボードにコピーされました!
組み込みテーマのスタイルに加えた変更を反映するには、カスタムスタイルを更新する必要がある場合があります。差分ツールを使用して、古いサーバーインストールと新しいサーバーインストール間のスタイルシートの変更を比較することを検討してください。
以下に例を示します。
diff RHSSO_HOME_OLD/themes/keycloak/login/resources/css/login.css \ RHSSO_HOME_NEW/themes/keycloak/login/resources/css/login.css
$ diff RHSSO_HOME_OLD/themes/keycloak/login/resources/css/login.css \
RHSSO_HOME_NEW/themes/keycloak/login/resources/css/login.css
変更を確認し、それらがカスタムスタイルに影響するかどうかを判断します。
第4章 Red Hat build of Keycloak アダプターのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak をアップグレードした後、アダプターをアップグレードできます。以前のバージョンのアダプターは、新しいバージョンの Red Hat build of Keycloak サーバーで動作する可能性がありますが、以前のバージョンの Red Hat build of Keycloak サーバーは、新しいバージョンのアダプターでは動作しない可能性があります。
4.1. 古いアダプターとの互換性 リンクのコピーリンクがクリップボードにコピーされました!
新しいバージョンの Red Hat build of Keycloak は、古いバージョンのアダプターで動作する可能性があります。ただし、Red Hat build of Keycloak サーバーの修正によって、古いバージョンのアダプターとの互換性が失われている可能性があります。たとえば、OpenID Connect 仕様の新しい実装が、古いクライアントアダプターのバージョンとマッチしない可能性があります。
このような状況では、互換モードを使用できます。OpenID Connect クライアントの場合は、管理コンソールのクライアント詳細ページに OpenID Connect Compatibility Modes が表示されます。このオプションを使用すると、古いクライアントアダプターとの互換性を維持するために、Red Hat build of Keycloak サーバーのいくつかの新しい機能を無効にできます。詳細は、個々のスイッチのツールヒントを参照してください。
4.2. EAP アダプターのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP アダプターをアップグレードするには、次の手順を実行します。
手順
- 新しいアダプターアーカイブをダウンロードします。
-
EAP_HOME/modules/system/add-ons/keycloak/
ディレクトリーを削除して、以前のアダプターモジュールを削除します。 -
ダウンロードしたアーカイブを
EAP_HOME
に展開します。
4.3. JavaScript アダプターのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Web アプリケーションにコピーされた JavaScript アダプターをアップグレードするには、以下の手順を実行します。
手順
- 新しいアダプターアーカイブをダウンロードします。
-
ダウンロードしたアーカイブの
keycloak.js
ファイルで、アプリケーション内のkeycloak.js
ファイルを上書きします。
4.4. Node.js アダプターのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Web アプリケーションにコピーした Node.js
アダプターをアップグレードするには、次の手順を実行します。
手順
- 新しいアダプターアーカイブをダウンロードします。
-
既存の
Node.js
アダプターのディレクトリーを削除します。 - 更新されたファイルをその場所に展開します。
-
アプリケーションの
package.json
で keycloak-connect の依存関係を変更します。
第5章 Red Hat build of Keycloak 管理クライアントのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
admin-client をアップグレードする前に、必ず Red Hat build of Keycloak サーバーをアップグレードしてください。以前のバージョンの admin-client は、新しいバージョンの Red Hat build of Keycloak サーバーで動作する可能性がありますが、以前のバージョンの Red Hat build of Keycloak サーバーは、新しいバージョンの admin-client では動作しない可能性があります。したがって、Red Hat build of Keycloak サーバーと一致する admin-client バージョンを使用してください。