移行ガイド
第1章 Red Hat Single Sign-On 7.6 から Red Hat build of Keycloak への移行 リンクのコピーリンクがクリップボードにコピーされました!
このガイドの目的は、Red Hat Single Sign-On 7.6 を Red Hat build of Keycloak 24.0 に正常に移行するために必要な手順を説明することです。この手順では、次の要素の移行を説明します。
- Red Hat Single Sign-On 7.6 サーバー
- OpenShift の Operator のデプロイメント
- OpenShift のテンプレートのデプロイメント
- Red Hat Single Sign-On 7.6 によって保護されたアプリケーション
- カスタムプロバイダー
- カスタムテーマ
このガイドには、アップストリーム版の Keycloak を Red Hat build of Keycloak 24.0 に移行するためのガイドラインも記載されています。移行を開始する前に、Red Hat build of Keycloak の新しいインスタンスをインストールして、このリリースの変更点を理解することをお勧めします。Red Hat build of Keycloak スタートガイド を参照してください。
第2章 Red Hat Single Sign-On 7.6 サーバーの移行 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、ZIP ディストリビューションからデプロイしたスタンドアロンサーバーを移行する手順を説明します。Red Hat build of Keycloak 24.0 は、Quarkus を使用して構築されています。Quarkus は、Red Hat Single Sign-On 7.6 で使用されていた Red Hat JBoss Enterprise Application Platform (JBoss EAP) に代わるものです。
サーバーに対する主な変更点は次のとおりです。
- 設定エクスペリエンスが刷新および合理化され、設定オプションの柔軟性が大きく向上しました。
- サーバーの RPM ディストリビューションが利用できなくなりました。
2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
2.2. 移行プロセスの概要 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、以下の内容の移行手順を説明します。
- Red Hat build of Keycloak をダウンロードします。
- 設定を移行します。
- データベースを移行します。
- Red Hat build of Keycloak サーバーを起動します。
2.3. Red Hat build of Keycloak のダウンロード リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak サーバーのダウンロード ZIP ファイルには、Red Hat build of Keycloak サーバーを実行するためのスクリプトとバイナリーが含まれています。
- Red Hat build of Keycloak サーバーのディストリビューションファイルを Red Hat カスタマーポータル からダウンロードします。
- unzip コマンドを使用して ZIP ファイルを解凍します。
2.4. 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak サーバーを設定する統一された方法として、設定オプションが新しく導入されました。Red Hat Single Sign-On 7.6 の設定メカニズム (standalone.xml、jboss-cli など) は使用できなくなりました。
各オプションは、次の設定ソースを通じて定義できます。
- CLI パラメーター
- 環境変数
- 設定ファイル
- Java KeyStore ファイル
同じ設定オプションが別々の設定ソースで指定されている場合は、上記のリストの最初のソースが使用されます。
すべての設定オプションは、さまざまな設定ソースすべてで使用できますが、主な違いはキーの形式です。たとえば、データベースのホスト名を設定する 4 つの方法を次に示します。
| ソース | 形式 |
|---|---|
| CLI パラメーター | --db-url-host cliValue |
| 環境変数 | KC_DB_URL_HOST=envVarValue |
| 設定ファイル | db-url-host=confFileValue |
| Java KeyStore ファイル | kc.db-url-host=keystoreValue |
kc.sh --help コマンドおよび Red Hat build of Keycloak ドキュメントに、使用可能なすべての設定オプションの詳細なリストが記載されています。オプションはキャッシュ、データベースなどのカテゴリーごとにグループ化されています。また、データベースの設定 の章など、設定する領域ごとに個別の章があります。
2.4.1. データベース設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 とは対照的に、Red Hat build of Keycloak には、サポート対象データベースのサポートが組み込まれているため、データベースドライバーを手動でインストールして設定する必要がありません。例外は Oracle と Microsoft SQL Server です。これらについては、ドライバーを手動でインストールする必要があります。
設定に関しては、Red Hat Single Sign-On 7.6 の既存インストールのデータソースサブシステムを考慮し、その設定を、Red Hat build of Keycloak のデータベース設定カテゴリーで利用可能なオプションにマッピングします。たとえば、以前の設定として、次のようなものがあるとします。
Red Hat build of Keycloak では、CLI パラメーターを使用した同等の設定は、次のようなものになります。
データベース認証情報は、セキュアな KeyStore 設定ソースに保存することを検討してください。
2.4.2. HTTP および TLS 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
実稼働モード (start オプションで表される) を使用する場合は常に、HTTP が無効になり、TLS 設定がデフォルトで必要になります。
--http-enabled=true 設定オプションを使用すると、HTTP を有効にできます。ただし、Red Hat build of Keycloak サーバーが完全に分離されたネットワーク内にあり、内部または外部の攻撃者がネットワークトラフィックを監視できるリスクがない場合を除き、このオプションの使用は推奨されません。
Red Hat build of Keycloak インスタンスは、サーバーのルートを使用するため、異なるコンテキストルート (URL パス) を持ちます。一方、Red Hat Single Sign-On 7.6 はデフォルトで /auth を追加します。以前の動作を再現するには、--http-relative-path=/auth 設定オプションを使用できます。デフォルトのポートは同じままです。ただし、--http-port および --https-port オプションによって変更することもできます。
TLS を設定するには 2 つの方法があります。PEM 形式のファイルを使用するか、Java キーストアを使用します。たとえば、Java キーストアによる以前の設定として、次のようなものがあるとします。
Red Hat build of Keycloak では、CLI パラメーターを使用した同等の設定は、次のようなものになります。
kc.sh start --https-key-store-file /path/to/application.keystore --https-key-store-password password
kc.sh start
--https-key-store-file /path/to/application.keystore
--https-key-store-password password
Red Hat build of Keycloak では、次のように PEM 形式の証明書を指定することで TLS を設定できます。
kc.sh start --https-certificate-file /path/to/certfile.pem --https-certificate-key-file /path/to/keyfile.pem
kc.sh start
--https-certificate-file /path/to/certfile.pem
--https-certificate-key-file /path/to/keyfile.pem
2.4.3. クラスタリングとキャッシュ設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 は、サーバーをスタンドアロン、スタンドアロンクラスター、およびドメインクラスターとして実行するための個別の動作モードを備えていました。これらのモードは、起動スクリプトと設定ファイルが異なります。Red Hat build of Keycloak では、単一の起動スクリプト kc.sh を使用したシンプルな方法を利用できます。
サーバーをスタンドアロンまたはクラスター化されたスタンドアロンとして実行するには、kc.sh スクリプトを使用します。
| Red Hat build of Keycloak | Red Hat Single Sign-On 7.6 |
|---|---|
| ./kc.sh start --cache=local | ./standalone.sh |
| ./kc.sh start [--cache=ispn] | ./standalone.sh --server-config=standalone-ha.xml |
--cache パラメーターのデフォルト値は、起動モードを認識します。
-
local- start-dev コマンドの実行時 -
ispn- start コマンドの実行時
Red Hat Single Sign-On 7.6 では、クラスタリングとキャッシュの設定を Infinispan サブシステムを通じて行っていました。一方、Red Hat build of Keycloak では、設定の大部分を、別の Infinispan 設定ファイルを通じて行います。たとえば、Infinispan の以前の設定として、次のようなものがあるとします。
Red Hat build of Keycloak では、デフォルトの Infinispan 設定ファイルは conf/cache-ispn.xml ファイルにあります。独自の Infinispan 設定ファイルを用意し、次のように CLI パラメーターを使用して指定できます。
kc.sh start --cache-config-file my-cache-file.xml
kc.sh start --cache-config-file my-cache-file.xml
ドメインクラスターモードは、Red Hat build of Keycloak ではサポートされていません。
トランスポートスタック
Red Hat build of Keycloak のデフォルトおよびカスタム JGroups トランスポートスタックを移行する必要はありません。
唯一の改善点は、CLI オプションのキャッシュスタックを指定することで、キャッシュ設定ファイルで定義されたスタックをオーバーライドできることです。指定すると、そのキャッシュスタックが優先されます。カスタム JGroups トランスポートスタックを使用した上記の Infinispan 設定ファイル my-cache-file.xml の一部として、次のようなものがあるとします。
keycloak キャッシュコンテナーのトランスポートスタックが tcp に設定されていますが、次のように CLI オプションを使用してこのスタックをオーバーライドできます。
kc.sh start --cache-config-file my-cache-file.xml --cache-stack my-encrypt-udp
kc.sh start
--cache-config-file my-cache-file.xml
--cache-stack my-encrypt-udp
上記のコマンドを実行すると、my-encrypt-udp トランスポートスタックが使用されます。
2.4.4. ホスト名とプロキシー設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、ホスト名 SPI の設定が必須です。これは、ユーザーをリダイレクトするとき、またはユーザーのクライアントと通信するときに、サーバーによってフロントエンド URL とバックエンド URL をどのように作成するかを設定するために必要です。
たとえば、Red Hat Single Sign-On 7.6 インストールに次のような設定があるとします。
Red Hat build of Keycloak では、これは次のような設定オプションに変換できます。
kc.sh start
--hostname-url myFrontendUrl
--hostname-strict-backchannel true
kc.sh start
--hostname-url myFrontendUrl
--hostname-strict-backchannel true
hostname-url 設定オプションを使用すると、クラスターの前で実行されているイングレス層からクラスターをパブリックに公開する場所となるベース URL を設定できます。hostname-admin-url 設定オプションを設定して、管理リソースの URL を設定することもできます。
Red Hat build of Keycloak を使用すると、どのリバースプロキシーヘッダーを反映するかを設定できます。Forwarded ヘッダーまたは X-Forwarded-* ヘッダーのセットのいずれかを使用できます。以下に例を示します。
kc.sh start --proxy-headers xforwarded
kc.sh start --proxy-headers xforwarded
ホスト名とプロキシー設定は、リソース URL (リダイレクト URI、CSS および JavaScript リンク、OIDC の既知のエンドポイントなど) を決定するために使用され、受信要求を積極的にブロックするために使用されるわけではありません。ホスト名/プロキシーオプションは、Red Hat build of Keycloak サーバーがリッスンする実際のバインディングアドレスやポートを変更しません。これは HTTP/TLS オプションの役割です。Red Hat Single Sign-On 7.6 では、ホスト名の設定が強く推奨されていましたが、強制はされていませんでした。Red Hat build of Keycloak では、start コマンドを使用する場合にホスト名の設定が必須になりました。ただし、--hostname-strict=false オプションで明示的に無効にした場合を除きます。
2.4.5. トラストストア設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
トラストストアは、HTTPS 要求や LDAP サーバーなどの外部 TLS 通信に使用します。トラストストアを使用するには、リモートサーバーまたは CA の証明書をトラストストアにインポートします。その後、システムのトラストストアを指定して Red Hat build of Keycloak サーバーを起動できます。
たとえば、以前の設定として、次のようなものがあるとします。
Red Hat build of Keycloak は、PEM ファイル、または拡張子が .p12 および .pfx の PKCS12 ファイル形式のトラストストアをサポートしています。PKCS12 ファイルの場合は、暗号化されている証明書は使用できません。つまり、パスワードは必要ありません。JKS トラストストアを変換する必要があります。Java keytool ではパスワードの最小長が 6 文字に制限されるため、暗号化されていない PKCS12 トラストストアを作成する代わりに openssl を使用できます。
古い JKS トラストストアの内容をインポートし、keytool を使用して一時パスワードを持つ PKCS12 トラストストアを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow opensslを使用して、新しい PKCS12 トラストストアの内容をエクスポートします。openssl pkcs12 -in path/to/myTrustStore.p12 \ -out path/to/myTrustStore.pem \ -nodes -passin pass:temp-password
openssl pkcs12 -in path/to/myTrustStore.p12 \ -out path/to/myTrustStore.pem \ -nodes -passin pass:temp-passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow opensslを使用して、暗号化されていない新しい PKCS12 トラストストアにコンテンツを再インポートします。openssl pkcs12 -export -in path/to/myTrustStore.pem \ -out path/to/myUnencryptedTrustStore.p12 \ -nokeys -passout pass:
openssl pkcs12 -export -in path/to/myTrustStore.pem \ -out path/to/myUnencryptedTrustStore.p12 \ -nokeys -passout pass:Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、結果の CLI パラメーターは次のようになります。
kc.sh start
--truststore-paths path/to/myUnencryptedTrustStore.p12
--tls-hostname-verifier WILDCARD
kc.sh start
--truststore-paths path/to/myUnencryptedTrustStore.p12
--tls-hostname-verifier WILDCARD
2.4.6. Vault 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
キーストア Vault は Vault SPI の実装であり、ベアメタルインストールにシークレットを保存するのに役立ちます。この Vault は、Red Hat Single Sign-On 7.6 の Elytron 認証情報ストアに代わるものです。
Red Hat build of Keycloak では、CLI パラメーターを使用した同等の設定は、次のようなものになります。
kc.sh start --vault keystore --vault-file /path/to/keystore.p12 --vault-pass password
kc.sh start
--vault keystore
--vault-file /path/to/keystore.p12
--vault-pass password
Vault に保存されたシークレットには、管理コンソール内の複数の場所からアクセスできます。既存の Elytron Vault から新しい Java KeyStore ベースの Vault への移行に関しては、レルム設定の変更は必要ありません。新しく作成された Java キーストアに同じシークレットが含まれている場合は、既存のレルム設定が機能するはずです。
デフォルトの REALM_UNDERSCORE_KEY キーリゾルバーを使用すると、以前と同じ方法で ${vault.realm-name_alias} によって (たとえば、LDAP ユーザーフェデレーション設定内で) シークレットにアクセスできます。
2.4.7. JVM 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak での JVM 設定方法は、Red Hat Single Sign-On 7.6 の方法と似ています。引き続き特定の環境変数を設定する必要がありますが、/bin フォルダーに standalone.conf などの設定ファイルが含まれません。
Red Hat build of Keycloak は、さまざまなデフォルトの JVM 引数を提供します。これは、メモリー割り当てと CPU オーバーヘッドの面で優れたスループットと効率を実現するため、ほとんどのデプロイメントに適していることが判明しています。また、他のデフォルトの JVM 引数は、Red Hat build of Keycloak インスタンスをスムーズに実行するためのものであり、ユースケースに合わせて引数を変更する場合は注意が必要です。
JVM 引数または GC 設定を変更するには、Java オプションとして指定する特定の環境変数を設定します。これらの設定を完全にオーバーライドするには、JAVA_OPTS 環境変数を指定します。
特定の Java プロパティーの追加のみが必要な場合は、JAVA_OPTS_APPEND 環境変数を指定します。JAVA_OPTS 環境変数が指定されていない場合は、./kc.sh スクリプト内にあるデフォルトの Java プロパティーが使用されます。
たとえば、次のように特定の Java オプションを指定できます。
export JAVA_OPTS_APPEND=-XX:+HeapDumpOnOutOfMemoryError kc.sh start
export JAVA_OPTS_APPEND=-XX:+HeapDumpOnOutOfMemoryError
kc.sh start
2.4.8. SPI プロバイダー設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
SPI プロバイダーの設定は、新しい設定システムを通じて行います。以下は古い形式です。
以下は新しい形式です。
spi-<spi-id>-<provider-id>-<property>=<value>
spi-<spi-id>-<provider-id>-<property>=<value>
| ソース | 形式 |
|---|---|
| CLI | ./kc.sh start --spi-connections-http-client-default-connection-pool-size 10 |
| Environment Variable | KC_SPI_CONNECTIONS_HTTP_CLIENT_DEFAULT_CONNECTION_POOL_SIZE=10 |
| 設定ファイル | spi-connections-http-client-default-connection-pool-size=10 |
| Java キーストアファイル | kc.spi-connections-http-client-default-connection-pool-size=10 |
2.4.9. 設定のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
トラブルシューティングには次のコマンドを使用します。
-
kc.sh show-config- 特定のプロパティーのロード元である設定ソースとその値を表示します。プロパティーとその値が正しく伝播されているかどうかを確認できます。 -
kc.sh --verbose start- エラーが発生した場合、エラースタックトレース全体を出力します。
2.5. データベースの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、データベーススキーマを自動的に移行することも、手動で移行することもできます。デフォルトでは、新規インストールを初めて起動すると、データベースが自動的に移行されます。
2.5.1. リレーショナルデータベースの自動移行 リンクのコピーリンクがクリップボードにコピーされました!
自動移行を実行するには、目的のデータベースに接続されているサーバーを起動します。新しいバージョンのサーバーのデータベーススキーマが変更された場合は、データベースが移行されます。
2.5.2. 手動によるリレーショナルデータベース移行 リンクのコピーリンクがクリップボードにコピーされました!
データベーススキーマを手動でアップグレードするには、デフォルトの connections-jpa プロバイダーの migration-strategy プロパティー値を manual に設定します。
kc.sh start --spi-connections-jpa-legacy-migration-strategy manual
kc.sh start --spi-connections-jpa-legacy-migration-strategy manual
この設定でサーバーを起動すると、データベースを移行する必要があるかどうかがチェックされます。必要な変更は bin/keycloak-database-update.sql SQL ファイルに書き込まれます。このファイルを確認してデータベースに対して手動で実行できます。
エクスポートされた SQL ファイルのパスと名前を変更するには、デフォルトの connections-jpa プロバイダーの migration-export プロパティーを設定します。
kc.sh start --spi-connections-jpa-legacy-migration-export <path>/<file.sql>
kc.sh start
--spi-connections-jpa-legacy-migration-export <path>/<file.sql>
このファイルをデータベースに適用する方法の詳細は、使用しているリレーショナルデータベースのドキュメントを参照してください。変更がファイルに書き込まれると、サーバーは終了します。
2.6. Red Hat build of Keycloak サーバーの起動 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 ディストリビューションと Red Hat build of Keycloak ディストリビューションの起動の違いは、実行されるスクリプトにあります。これらのスクリプトは、サーバーディストリビューションの /bin フォルダーにあります。
2.6.1. 開発モードでのサーバーの起動 リンクのコピーリンクがクリップボードにコピーされました!
プロパティーの指定を気にせずに Red Hat build of Keycloak を試すには、以下の表の説明に従って開発モードでディストリビューションを起動できます。ただし、このモードは開発専用であり、実稼働環境では使用しないでください。
| Red Hat build of Keycloak | Red Hat Single Sign-On 7.6 |
|---|---|
| ./kc.sh start-dev | ./standalone.sh |
開発モードは実稼働環境では使用しないでください。
2.6.2. 実稼働モードでのサーバーの起動 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak には、実稼働用の専用の起動モード ./kc.sh start があります。start-dev で実行する場合の違いは、デフォルトの設定値が異なることです。デフォルトでセキュリティー保護された厳密な設定セットアップが自動的に使用されます。実稼働モードでは、HTTP が無効になり、明示的な TLS とホスト名の設定が必要です。
第3章 Openshift の Operator デプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak Operator は、刷新されたサーバー設定に合わせて完全に再構築されました。Operator は、Red Hat build of Keycloak と完全に統合しますが、Red Hat Single Sign-On 7.6 Operator との下位互換性はありません。新しい Operator を使用するには、Red Hat build of Keycloak デプロイメントを作成する必要があります。詳細は、Operator ガイド を参照してください。
3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Single Sign-On 7.6 の以前のインスタンスが、Red Hat build of Keycloak と同じデータベースインスタンスを使用しないように、シャットダウンされている。
- サポート対象外の組み込みデータベース (Red Hat Single Sign-On 7.6 Operator によって管理されるもの) を使用していた場合、そのデータベースが、ユーザーによってプロビジョニングされた外部データベースに変換されている。
- データベースのバックアップが作成されている。
- リリースノート を確認した。
3.2. 移行プロセス リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat build of Keycloak Operator を namespace にインストールします。
- 新しい CR と関連するシークレットを作成します。Red Hat Single Sign-On 7.6 の設定を新しい Keycloak CR に手動で移行します。
- カスタムプロバイダーを使用していた場合は、それらを移行し、カスタムプロバイダーを含めるカスタムの Red Hat build of Keycloak コンテナーイメージを作成します。
- カスタムテーマを使用していた場合は、それらを移行し、カスタムプロバイダーを含めるカスタムの Red Hat build of Keycloak コンテナーイメージを作成します。
3.3. Keycloak CR の移行 リンクのコピーリンクがクリップボードにコピーされました!
Keycloak CR は、すべてのサーバー設定オプションをサポートするようになりました。関連するすべてのオプションを、CR 仕様で、直接ファーストクラスシチズンフィールドとして使用できます。CR のすべてのオプションは、サーバーオプションと同じ命名規則に準拠しています。これにより、ベアメタルデプロイメントと Operator デプロイメント間のエクスペリエンスがシームレスになります。
さらに、SPI プロバイダー設定など、CR に不足しているオプションを additionalOptions フィールドで定義できます。また、サポートされる代替フィールドが CR のファーストクラスシチズンフィールドとして存在しない場合は、podTemplate (テクノロジープレビューのフィールド) を使用して、Kubernetes デプロイメントの RAW Pod テンプレートを変更することもできます。
以下は、Operator を通じて Red Hat build of Keycloak をデプロイするための Keycloak CR の例を示しています。
CLI 設定との類似点に注目してください。
./kc.sh start --db=postgres --db-url-host=postgres-db --db-username=user --db-password=pass --https-certificate-file=mycertfile --https-certificate-key-file=myprivatekey --hostname=test.keycloak.org --spi-connections-http-client-default-connection-pool-size=20
./kc.sh start --db=postgres --db-url-host=postgres-db --db-username=user --db-password=pass --https-certificate-file=mycertfile --https-certificate-key-file=myprivatekey --hostname=test.keycloak.org --spi-connections-http-client-default-connection-pool-size=20
3.3.1. データベース設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、以前に Red Hat Single Sign-On 7.6 で使用されていたのと同じデータベースインスタンスを使用できます。データベーススキーマは、Red Hat build of Keycloak が初めてデータベースに接続するときに自動的に移行されます。
Red Hat Single Sign-On 7.6 Operator によって管理される組み込みデータベースの移行は、サポートされていません。
Red Hat Single Sign-On 7.6 Operator では、外部データベース接続はシークレットを使用して設定していました。次に例を示します。
Red Hat build of Keycloak では、データベースは、シークレットとして参照される認証情報を使用して Keycloak CR に直接設定されます。次に例を示します。
3.3.1.1. サポートされているデータベースベンダー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 Operator は PostgreSQL データベースのみをサポートしていました。一方、Red Hat build of Keycloak Operator はサーバーでサポートされているすべてのデータベースベンダーをサポートしています。
3.3.2. TLS 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 Operator では、デフォルトで、OpenShift CA によって生成された TLS シークレットを使用するようにサーバーが設定されていました。Red Hat build of Keycloak Operator では、実稼働環境のベストプラクティスを実現するために、TLS については何も前提を設けておらず、ユーザーが独自の TLS 証明書とキーペアを提供する必要があります。次に例を示します。
tlsSecret で参照されるシークレットの形式には、標準の Kubernetes TLS シークレット (kubernetes.io/tls) タイプを使用する必要があります。
Red Hat Single Sign-On 7.6 Operator は、デフォルトで、ルートで再暗号化 TLS Termination ストラテジーを使用していました。Red Hat build of Keycloak Operator は、デフォルトでパススルーストラテジーを使用します。また、Red Hat Single Sign-On 7.6 Operator は、TLS Termination の設定をサポートしていました。Red Hat build of Keycloak Operator は、現在のリリースでは TLS Termination をサポートしていません。
デフォルトの Operator 管理のルートが必要な TLS 設定を満たさない場合は、ユーザーがカスタムルートを作成し、デフォルトのルートを次のようにして無効にする必要があります。
3.3.3. エクステンションのためのカスタムイメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak Operator では、ベストプラクティスを反映し、イミュータブルコンテナーをサポートするために、Keycloak CR でのエクステンションの指定がサポートされていません。エクステンションをデプロイするには、最適化されたカスタムイメージをビルドする必要があります。Keycloak CR には、Red Hat build of Keycloak イメージを指定するための専用フィールドが含まれるようになりました。次に例を示します。
カスタムイメージを指定した場合、Operator はそれがすでに最適化されていると想定し、サーバーを起動するたびにコストのかかる最適化を実行しません。
3.3.4. アップグレードストラテジーオプションの削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 Operator は、サーバーのアップグレード実行時の再作成およびローリングストラテジーをサポートしていました。このアプローチは現実的ではありませんでした。Red Hat Single Sign-On 7.6 Operator がアップグレードとデータベース移行を実行する前にデプロイメントをスケールダウンするかどうかは、ユーザーが選択する必要がありました。ローリングストラテジーがいつ安全に使用できるかは、ユーザーには明らかではありませんでした。
したがって、このオプションは Red Hat build of Keycloak Operator では削除され、再作成ストラテジーは常に暗黙的に実行されるようになりました。これにより、新しいサーバーコンテナーイメージで Pod を作成する前にデプロイメント全体がスケールダウンされ、単一のサーバーバージョンのみがデータベースにアクセスできるようになります。
3.3.5. デフォルトで公開されるヘルスエンドポイント リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak は、OpenShift プローブによって使用される単純なヘルスエンドポイントをデフォルトで公開するようにサーバーを設定します。エンドポイントはデプロイメントに関するセキュリティー上の機密データを公開しませんが、エンドポイントには認証なしでアクセスできます。代替策として、<your-server-context-root>/health エンドポイントをカスタムルートでブロックできます。
以下に例を示します。
TLS edge termination 用に設定された Keycloak を作成します。
tlsSecretフィールドは必ず省略してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヘルスエンドポイントへのアクセスを禁止するブロッキングルートを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
パスベースのルートでは、エッジまたは再暗号化のいずれかに対して TLS Termination を設定する必要があります。デフォルトでは、Operator はパススルーを使用します。
3.3.6. Pod テンプレートを使用した高度なデプロイメントオプションの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 Operator は、ボリュームなどのデプロイメント設定用の複数の低レベルフィールドを公開していました。Red Hat build of Keycloak Operator は事前設定される部分が多く、これらのフィールドのほとんどは公開されません。ただし、podTemplate として指定されたデプロイメントフィールドを設定することは可能です。次に例を示します。
spec.unsupported.podTemplate フィールドは、すべての条件下で機能が十分にテストされていない低レベルの設定を公開するため、サポートが限定的になります。可能な限り、CR 仕様の最上位で、完全にサポートされているファーストクラスシチズンフィールドを使用してください。
たとえば、spec.unsupported.podTemplate.spec.imagePullSecrets の代わりに、spec.imagePullSecrets を直接使用します。
3.3.7. 外部インスタンスへの接続はサポート対象外 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 Operator では、Red Hat Single Sign-On 7.6 の外部インスタンスへの接続がサポートされていました。Red Hat build of Keycloak Operator では、たとえば、クライアント CR を使用して既存のレルム内にクライアントを作成することは、サポートされなくなりました。
3.3.8. Horizontal Pod Autoscaler 対応デプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 で Horizontal Pod Autoscaler (HPA) を使用するには、Keycloak CR の disableReplicasSyncing: true フィールドを設定し、サーバーの StatefulSet をスケーリングする必要がありました。これは不要になりました。Red Hat build of Keycloak Operator の Keycloak CR は、HPA によって直接スケーリングできるためです。
3.4. Keycloak Realm CR の移行 リンクのコピーリンクがクリップボードにコピーされました!
Realm CR は、同様の機能を提供し、同様のスキーマを持つ Realm Import CR に置き換えられました。Realm Import CR はレルムのブートストラップのみを提供するため、レルムの削除をサポートしなくなりました。以前の Realm CR と同様に、更新もサポートしていません。
一部のフィールドのみを提供していた以前の Realm CR と比較して、Realm Import CR には、完全なレルム表現が含まれるようになりました。
Red Hat Single Sign-On 7.6 Realm CR の例:
対応する Red Hat build of Keycloak Realm Import CR の例:
3.5. 削除された CR リンクのコピーリンクがクリップボードにコピーされました!
Client CR と User CR は、Red Hat build of Keycloak Operator から削除されました。これらの CR の欠如は、新しい Realm Import CR によって部分的に軽減できます。Client CR のサポート追加は、Red Hat build of Keycloak の今後のリリースに関するロードマップに含まれていますが、User CR は現在計画されている機能ではありません。
第4章 Openshift のテンプレートデプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift テンプレートは非推奨となり、Red Hat build of Keycloak コンテナーイメージから削除されました。OpenShift に Red Hat build of Keycloak をデプロイする場合は、代わりに Operator を使用することを推奨します。
OpenShift 3.x はサポートされなくなりました。
通常は、外部管理データベースを参照する (Red Hat build of Keycloak Operator の) Keycloak CR を作成する必要があります。このテンプレートを使用する PostgreSQL データベースは、DeploymentConfig によって管理されます。まず、テンプレートによって作成された application_name-postgresql DeploymentConfig が保存されます。DeploymentConfig によって PostgreSQL データベースインスタンスが作成されると、そのインスタンスが Red Hat build of Keycloak Operator で使用できるようになります。
このガイドには、Operator またはクラウドプロバイダーによるこのインスタンスから自己管理型データベースへの移行手順は記載されてません。
Red Hat build of Keycloak Operator はデータベースを管理しないため、データベースを別途プロビジョニングして管理する必要があります。
4.1. 内部 H2 データベースを使用したデプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
関係するテンプレートは次のとおりです。
- sso76-ocp3-https
- sso76-ocp4-https
- sso76-ocp3-x509-https
- sso76-ocp4-x509-https
これらのテンプレートは devel データベースに依存しているため、実稼働環境での使用はサポートされていません。
4.2. 一時的な PostgreSQL データベースを使用したデプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
関係するテンプレートは次のとおりです。
- sso76-ocp3-postgresql
- sso76-ocp4-postgresql
このテンプレートは、永続ストレージを使用せずに PostgreSQL データベースを作成します。これは開発目的でのみ推奨されます。
4.3. 永続的な PostgreSQL データベースを使用したデプロイメントの移行 リンクのコピーリンクがクリップボードにコピーされました!
関係するテンプレートは次のとおりです。
- sso76-ocp3-postgresql-persistent
- sso76-ocp4-postgresql-persistent
- sso76-ocp3-x509-postgresql-persistent
- sso76-ocp4-x509-postgresql-persistent
4.3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Single Sign-On 7.6 の以前のインスタンスが、Red Hat build of Keycloak と同じデータベースインスタンスを使用しないように、シャットダウンされている。
- データベースのバックアップが作成されている。
- リリースノート を確認した。
4.4. 移行プロセス リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat build of Keycloak Operator を namespace にインストールします。
新しい CR と関連するシークレットを作成します。
テンプレートベースの Red Hat Single Sign-On 7.6 設定を、新しい Red Hat build of Keycloak CR に手動で移行します。テンプレートパラメーターと Keycloak CR フィールド間の推奨マッピングについては、次の例を参照してください。
以下の例では、Red Hat build of Keycloak Operator CR と、Red Hat Single Sign-On 7.6 テンプレートによって以前に作成した DeploymentConfig を比較します。
Red Hat build of Keycloak の Operator CR
Red Hat Single Sign-On 7.6 の DeploymentConfig
次の表に、Keycloak CR のフィールドを JSON パス表記で示します。たとえば、.spec は spec フィールドを示します。spec.unsupported はテクノロジープレビューのフィールドです。その機能は、最終的に他の CR フィールドによって実現可能になる予定です。太字 のパラメーターは、パススルーテンプレートと再暗号化テンプレートの両方でサポートされています。
4.4.1. 一般的なパラメーターの移行 リンクのコピーリンクがクリップボードにコピーされました!
| Red Hat Single Sign-On 7.6 | Red Hat build of Keycloak 24.0 |
|---|---|
| APPLICATION_NAME | .metadata.name |
| IMAGE_STREAM_NAMESPACE | 該当なし - イメージは Operator によって制御されます。または、ユーザーが主に spec.image を使用してカスタムイメージを指定します。 |
| SSO_ADMIN_USERNAME | 直接設定はありません。デフォルトは admin です。 |
| SSO_ADMIN_PASSWORD | 該当なし - 初期調整中に Operator によって作成されます。 |
| MEMORY_LIMIT |
|
| SSO_SERVICE_PASSWORD、SSO_SERVICE_USERNAME | 使用されなくなりました。 |
| SSO_TRUSTSTORE、SSO_TRUSTSTORE_PASSWORD、SSO_TRUSTSTORE_SECRET |
|
| SSO_REALM | 既存のデータベースを再利用する場合は不要です。代わりに RealmImport CR を使用することもできます。 |
4.4.2. データベースデプロイメントパラメーターの移行 リンクのコピーリンクがクリップボードにコピーされました!
POSTGRESQL_IMAGE_STREAM_TAG、POSTGRESQL_MAX_CONNECTIONS、VOLUME_CAPACITY、および POSTGRESQL_SHARED_BUFFERS は、データベースデプロイメントを作成するために選択した代替パラメーターに移行する必要があります。
4.4.3. データベース接続パラメーターの移行 リンクのコピーリンクがクリップボードにコピーされました!
| Red Hat Single Sign-On 7.6 | Red Hat build of Keycloak 24.0 |
|---|---|
| DB_VENDOR |
|
| DB_DATABASE |
|
| DB_MIN_POOL_SIZE |
|
| DB_MAX_POOL_SIZE |
|
| DB_TX_ISOLATION |
ドライバーでサポートされている場合、またはターゲットデータベースの一般設定として、 |
| DB_USERNAME |
|
| DB_PASSWORD |
|
| DB_JNDI | 適用されなくなりました。 |
4.4.4. ネットワークパラメーターの移行 リンクのコピーリンクがクリップボードにコピーされました!
| Red Hat Single Sign-On 7.6 | Red Hat build of Keycloak 24.0 |
|---|---|
| HOSTNAME_HTTP |
|
| HOSTNAME_HTTPS |
|
| SSO_HOSTNAME |
|
| HTTPS_SECRET |
|
| HTTPS_KEYSTORE HTTPS_KEYSTORE_TYPE HTTPS_NAME HTTPS_PASSWORD |
適用されなくなりました。 |
| X509_CA_BUNDLE |
|
Red Hat build of Keycloak Operator は現在、TLS Termination を設定する方法をサポートしていないことに注意してください。デフォルトでは、パススルーストラテジーが使用されます。したがって、パススルーストラテジーと再暗号化ストラテジーのどちらが使用されるかは問題ではないため、プロキシーオプションは、まだファーストクラスシチズンオプションフィールドとして公開されていません。ただし、このオプションが必要な場合は、Red Hat build of Keycloak の証明書を信頼するために、デフォルトの Ingress Operator 証明書を置き換えてルートを手動で設定できます。
Red Hat build of Keycloak Operator のデフォルトの動作は、次のように指定することででオーバーライドできます。
additionalOptions: name: proxy value: reencrypt
additionalOptions:
name: proxy
value: reencrypt
4.4.5. JGroups パラメーターの移行 リンクのコピーリンクがクリップボードにコピーされました!
JGROUPS_ENCRYPT_SECRET、JGROUPS_ENCRYPT_KEYSTORE、JGROUPS_ENCRYPT_NAME、JGROUPS_ENCRYPT_PASSWORD、および JGROUPS_CLUSTER_PASSWORD には、Keycloak CR のファーストクラス表現がありません。キャッシュ通信の保護は、キャッシュ設定ファイルを使用して引き続き可能です。
第5章 Red Hat Single Sign-On 7.6 によってセキュリティー保護されたアプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、アプリケーションによる一部の Red Hat Single Sign-On 7.6 クライアントアダプターの使用方法に重要な変更が導入されています。
Red Hat build of Keycloak では、一部のクライアントアダプターのリリースが中止されることに加えて、クライアントアプリケーションによる OpenID Connect および SAML プロトコルの使用方法に影響を与える修正と改善も導入されています。
この章では、これらの変更に対処し、アプリケーションを移行して Red Hat build of Keycloak と統合する手順を説明します。
5.1. OpenID Connect クライアントの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak のこのリリース以降、以下の Java クライアント OpenID Connect アダプターはリリースされなくなりました。
- Red Hat JBoss Enterprise Application Platform 6.x
- Red Hat JBoss Enterprise Application Platform 7.x
- Spring Boot
- Red Hat Fuse
これらのアダプターが最初にリリースされたときと比較して、OpenID Connect は Java エコシステム全体で広く利用できるようになりました。また、アプリケーションサーバーやフレームワークなどのテクノロジースタックから利用可能な機能を使用することにより、相互運用性とサポートが大幅に向上します。
これらのアダプターはサポートが終了しており、Red Hat Single Sign-On 7.6 からのみ利用可能です。OAuth2 および OpenID Connect プロトコルの最新の更新を使用してアプリケーションを最新の状態に保つための代替手段を探すことを強く推奨します。
5.1.1. OpenID Connect プロトコルとクライアント設定の主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
5.1.1.1. Access Type クライアントオプションは利用不可 リンクのコピーリンクがクリップボードにコピーされました!
OpenID Connect クライアントの作成または更新時に Access Type が使用できなくなります。ただし、他の方法を使用してこの機能を実現することもできます。
- Bearer Only 機能を実現するには、認証フローを持たないクライアントを作成します。クライアントの詳細の Capability config セクションで、フローが選択されていないことを確認してください。クライアントは Keycloak からトークンを取得できません。これは、Bearer Only アクセスタイプを使用した場合と同じです。
- Public 機能を実現するには、このクライアントに対してクライアント認証が無効になっていて、少なくとも 1 つのフローが有効になっていることを確認してください。
- Confidential 機能を実現するには、クライアントに対して Client Authentication が有効になっていて、少なくとも 1 つのフローが有効になっていることを確認してください。
ブール値フラグの bearerOnly と publicClient は、クライアント JSON オブジェクトに引き続き存在します。これらは、管理 REST API によってクライアントを作成または更新するとき、または部分インポートまたはレルムインポートによってこのクライアントをインポートするときに使用できます。ただし、これらのオプションは管理コンソール v2 では直接使用できません。
5.1.1.2. 有効なリダイレクト URI の検証スキームの変更 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションクライアントが http(s) 以外のカスタムスキームを使用している場合、有効なリダイレクトパターンでそのスキームを明示的に許可することが検証に必要になりました。カスタムスキームを許可するパターンの例には、custom:/test、custom:/test/*、custom: などがあります。セキュリティー上の理由から、* などの一般的なパターンは、これらのスキームに対して無効になりました。
5.1.1.3. OpenID Connect ログアウトエンドポイントでの client_id パラメーターのサポート リンクのコピーリンクがクリップボードにコピーされました!
client_id パラメーターをサポートします。これは、OIDC RP-Initiated Logout 1.0 仕様に基づいています。この機能は、id_token_hint パラメーターが使用できない場合に、ログアウト後の URI リダイレクト検証にどのクライアントを使用する必要があるかを検出するのに役立ちます。id_token_hint パラメーターを使用せずに client_id パラメーターのみを使用した場合でも、ログアウト確認画面をユーザーに表示する必要があります。そのため、ユーザーにログアウト確認画面を表示する必要がない場合は、クライアントに id_token_hint パラメーターを使用することを推奨します。
5.1.2. Valid Post Logout Redirect URI リンクのコピーリンクがクリップボードにコピーされました!
Valid Post Logout Redirect URIs 設定オプションが OIDC クライアントに追加されました。これは、OIDC 仕様に準拠しています。ログインおよびログアウト後のリダイレクトには、別のリダイレクト URI セットを使用できます。Valid Post Logout Redirect URIs に使用される値 + は、Valid Redirect URIs オプションで指定されたのと同じリダイレクト URI のセットがログアウトに使用されることを意味します。この変更は、下位互換性のため、以前のバージョンから移行するときのデフォルトの動作にも一致します。
5.1.2.1. UserInfo エンドポイントの変更 リンクのコピーリンクがクリップボードにコピーされました!
5.1.2.1.1. エラー応答の変更 リンクのコピーリンクがクリップボードにコピーされました!
UserInfo エンドポイントが、RFC 6750 (The OAuth 2.0 Authorization Framework: Bearer Token Usage) に完全に準拠したエラー応答を返すようになりました。エラーコードと説明 (利用可能な場合) は、JSON オブジェクトフィールドではなく WWW-Authenticate チャレンジ属性として提供されます。
応答は、エラーの状態に応じて次のようになります。
アクセストークンが提供されていない場合:
401 Unauthorized WWW-Authenticate: Bearer realm="myrealm"
401 Unauthorized WWW-Authenticate: Bearer realm="myrealm"Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクセストークンを提供するために複数の方法が同時に使用された場合 (たとえば、認可ヘッダー + POST access_token パラメーター)、または POST パラメーターが重複する場合:
400 Bad Request WWW-Authenticate: Bearer realm="myrealm", error="invalid_request", error_description="..."
400 Bad Request WWW-Authenticate: Bearer realm="myrealm", error="invalid_request", error_description="..."Copy to Clipboard Copied! Toggle word wrap Toggle overflow アクセストークンに
openidスコープがない場合:403 Forbidden WWW-Authenticate: Bearer realm="myrealm", error="insufficient_scope", error_description="Missing openid scope"
403 Forbidden WWW-Authenticate: Bearer realm="myrealm", error="insufficient_scope", error_description="Missing openid scope"Copy to Clipboard Copied! Toggle word wrap Toggle overflow UserInfo 応答の署名/暗号化の暗号鍵を解決できない場合:
500 Internal Server Error
500 Internal Server ErrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow トークン検証エラーの場合、
invalid_tokenエラーコードと併せて401 Unauthorizedが返されます。このエラーには、ユーザーおよびクライアント関連のチェックが含まれており、残りのすべてのエラーケースがキャプチャーされます。401 Unauthorized WWW-Authenticate: Bearer realm="myrealm", error="invalid_token", error_description="..."
401 Unauthorized WWW-Authenticate: Bearer realm="myrealm", error="invalid_token", error_description="..."Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2.1.2. UserInfo エンドポイントに対するその他の変更 リンクのコピーリンクがクリップボードにコピーされました!
アクセストークンに openid スコープが必要になりました。これは、OAuth 2.0 ではなく OpenID Connect に固有の機能である UserInfo によって規定されています。openid スコープがトークンにない場合、要求が 403 Forbidden として拒否されます。前のセクションを参照してください。
UserInfo がユーザーのステータスをチェックするようになり、ユーザーが無効な場合は、invalid_token 応答を返すようになりました。
5.1.2.1.3. Service Account Client のデフォルト Client ID マッパーの変更 リンクのコピーリンクがクリップボードにコピーされました!
Service Account Client のデフォルトの Client ID マッパーが変更されました。Token Claim Name フィールドの値が clientId から client_id に変更されました。client_id クレームは OAuth2 仕様に準拠しています。
clientId userSession ノートは引き続き存在します。
5.1.2.1.4. 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 パラメーターの追加を無効にすると役立つことがあります。これは、管理コンソールから、OpenID Connect Compatibility Modes を含むセクション内のクライアントの詳細で、特定のクライアントに対して行うことができます。Exclude Issuer From Authentication Response を有効にすると、認証応答への iss パラメーターの追加を回避できます。
5.2. Red Hat JBoss Enterprise Application Platform アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
5.2.1. Red Hat JBoss Enterprise Application Platform 8.x リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションに、Red Hat build of Keycloak やその他の OpenID プロバイダーと統合するための追加の依存関係が不要になりました。
代わりに、JBoss EAP のネイティブ OpenID Connect クライアントからの OpenID Connect サポートを利用できます。詳細は、JBoss EAP での OpenID Connect を参照してください。
JBoss EAP のネイティブアダプターは、Red Hat build of Keycloak のアダプター JSON 設定によく似た設定スキーマに依存します。たとえば、keycloak.json 設定ファイルを使用したデプロイメントは、JBoss EAP の次の設定にマッピングできます。
JBoss EAP のネイティブアダプターを使用して Jakarta ベースのアプリケーションを Red Hat build of Keycloak と統合する例については、Red Hat build of Keycloak クイックスタートリポジトリーにある次の例を参照してください。
JBoss EAP のネイティブ OpenID Connect クライアントに移行することを強く推奨します。これは JBoss EAP 8 以降にデプロイされた Jakarta アプリケーションに最適です。
5.2.2. Red Hat JBoss Enterprise Application Platform 7.x リンクのコピーリンクがクリップボードにコピーされました!
Red Hat JBoss Enterprise Application Platform 7.x は、フルサポートの終了に近づいているため、Red Hat build of Keycloak ではサポートされません。Red Hat JBoss Enterprise Application Platform 7.x にデプロイされた既存のアプリケーションについては、メンテナンスサポート対象のアダプターが Red Hat Single Sign-On 7.6 を通じて利用可能です。
Red Hat Single Sign-On 7.6 アダプターは、Red Hat build of Keycloak 24.0 サーバーと組み合わせて使用することがサポートされています。
5.2.3. Red Hat JBoss Enterprise Application Platform 6.x リンクのコピーリンクがクリップボードにコピーされました!
Red Hat JBoss Enterprise Application Platform JBoss EAP 6.x はメンテナンスサポートの終了に達したため、今後は Red Hat Single Sign-On 7.6 でも Red Hat build of Keycloak でもサポートされません。
5.3. Spring Boot アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
Spring Framework エコシステムは急速に発展しており、エコシステムが提供する OpenID Connect サポートを活用することで、より優れたエクスペリエンスが得られます。
アプリケーションに、Red Hat build of Keycloak やその他の OpenID プロバイダーと統合するための追加の依存関係が不要になりました。アプリケーションは、Spring Security の包括的な OAuth2/OpenID Connect サポートに依存します。詳細は、OAuth2/OpenID Connect support from Spring Security を参照してください。
このサポートは、機能の面では、標準ベースの OpenID Connect クライアント実装を提供します。標準プロトコルをまだ使用していない場合は、たとえば Logout 機能を再検討することをお勧めします。Red Hat build of Keycloak は、OpenID Connect エコシステムの標準ベースのログアウトプロトコルを完全にサポートしています。
Spring Security アプリケーションを Red Hat build of Keycloak と統合する方法の例については、クイックスタートリポジトリー を参照してください。
Spring Boot 用の Red Hat build of Keycloak クライアントアダプターから移行できない場合は、現在メンテナンスのみのサポートとなっている Red Hat Single Sign-On 7.6 からアダプターを利用できます。
Red Hat Single Sign-On 7.6 アダプターは、Red Hat build of Keycloak 24.0 サーバーと組み合わせて使用することがサポートされています。
5.4. Red Hat Fuse アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Fuse はフルサポートの終了に達したため、Red Hat build of Keycloak 24.0 ではサポートされません。Red Hat Fuse アダプターは、Red Hat Single Sign-On 7.6 によるメンテナンスサポートを通じて引き続き利用できます。
Red Hat Single Sign-On 7.6 アダプターは、Red Hat build of Keycloak 24.0 サーバーと組み合わせて使用することがサポートされています。
5.5. Authorization Services Policy Enforcer を使用したアプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak Authorization Services との統合をサポートするために、ポリシーエンフォーサーは Java クライアントアダプターとは別に提供されています。
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-policy-enforcer</artifactId>
<version>${Red Hat build of Keycloak .version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-policy-enforcer</artifactId>
<version>${Red Hat build of Keycloak .version}</version>
</dependency>
ポリシーエンフォーサーが Java クライアントアダプターから切り離されたため、Red Hat build of Keycloak を、OAuth2 または OpenID Connect のビルトインサポートを提供する Java テクノロジーに統合できるようになりました。Red Hat build of Keycloak Policy Enforcer は、次のタイプのアプリケーションに対するビルトインサポートを提供します。
- 粒度の細かい認可を使用したサーブレットアプリケーション
- Red Hat build of Keycloak Authorization Services を使用してセキュリティー保護された Spring Boot REST サービス
Red Hat build of Keycloak Policy Enforcer をさまざまなタイプのアプリケーションと統合するには、次の例を参照してください。
使用している Red Hat Single Sign-On 7.6 Java アダプターから移行できない場合は、現在メンテナンスサポートの対象となっている Red Hat Single Sign-On 7.6 からアダプターを利用できます。
Red Hat Single Sign-On 7.6 アダプターは、Red Hat build of Keycloak 24.0 サーバーと組み合わせて使用することがサポートされています。
5.6. Red Hat build of Keycloak JS アダプターを使用した Single Page Applications (SPA) の移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 アダプターでセキュリティー保護されたアプリケーションを移行するには、より新しいバージョンのアダプターを提供する Red Hat build of Keycloak 24.0 にアップグレードします。使用方法に応じて、以下に説明する若干の変更が必要になります。
5.6.1. レガシー Promise API の削除 リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、Red Hat build of Keycloak JS アダプターからレガシー Promise API メソッドが削除されました。そのため、アダプターから返された Promise で .success() および .error() を呼び出すことができなくなりました。
5.6.2. 新しい Operator を使用してインスタンス化する必要性 リンクのコピーリンクがクリップボードにコピーされました!
以前のリリースでは、Red Hat build of Keycloak JS アダプターを新しい Operator を使用せずに構築すると、非推奨の警告がログに記録されていました。このリリース以降、これを行うと代わりに例外が出力されます。この変更は、JavaScript クラス の想定される動作との整合性を確保し、将来的にアダプターのさらなるリファクタリングを可能にするためのものです。
Red Hat Single Sign-On 7.6 アダプターでセキュリティー保護されたアプリケーションを移行するには、より新しいバージョンのアダプターを提供する Red Hat build of Keycloak 24.0 にアップグレードします。
5.7. SAML アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
5.7.1. Red Hat JBoss Enterprise Application Platform アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
5.7.1.1. Red Hat JBoss Enterprise Application Platform 8.x リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak 24.0 には、Jakarta EE のサポートを含む、Red Hat JBoss Enterprise Application Platform 8.x のクライアントアダプターが含まれています。
5.7.1.2. Red Hat JBoss Enterprise Application Platform 7.x リンクのコピーリンクがクリップボードにコピーされました!
Red Hat JBoss Enterprise Application Platform 7.x は、フルサポートの終了に近づいているため、Red Hat build of Keycloak ではサポートされません。Red Hat JBoss Enterprise Application Platform 7.x にデプロイされた既存のアプリケーションについては、メンテナンスサポート対象のアダプターが Red Hat Single Sign-On 7.6 を通じて利用可能です。
Red Hat Single Sign-On 7.6 アダプターは、Red Hat build of Keycloak 24.0 サーバーと組み合わせて使用することがサポートされています。
5.7.1.3. Red Hat JBoss Enterprise Application Platform 6.x リンクのコピーリンクがクリップボードにコピーされました!
Red Hat JBoss Enterprise Application Platform JBoss EAP 6.x はメンテナンスサポートの終了に達したため、今後は Red Hat Single Sign-On 7.6 でも Red Hat build of Keycloak でもサポートされません。
5.7.2. SAML プロトコルとクライアント設定の主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
5.7.2.1. SAML SP メタデータの変更 リンクのコピーリンクがクリップボードにコピーされました!
このリリースより前は、SAML SP メタデータに、署名と暗号化の両方に使用する同じキーが含まれていました。このバージョンの Keycloak 以降、SP メタデータには、暗号化に使用する暗号化専用のレルムキーのみが含まれます。また、各暗号化キー記述子に対して、併用すべきアルゴリズムが指定されています。次の表に、サポートされている XML-Enc アルゴリズムと、Red Hat build of Keycloak レルムキーへのマッピングを示します。
| XML-Enc アルゴリズム | レルムキーアルゴリズム |
|---|---|
| rsa-oaep-mgf1p | RSA-OAEP |
| rsa-1_5 | RSA1_5 |
5.7.2.2. SAML の RSA_SHA1 および DSA_SHA1 アルゴリズムの非推奨化 リンクのコピーリンクがクリップボードにコピーされました!
SAML アダプター、クライアント、およびアイデンティティープロバイダーで Signature algorithms として設定できるアルゴリズム RSA_SHA1 および DSA_SHA1 が非推奨になりました。SHA256 または SHA512 をベースとした、より安全な代替手段を使用することを推奨します。また、これらのアルゴリズムを使用した署名付き SAML ドキュメントまたはアサーションの署名の検証は、Java 17 以降では機能しません。このアルゴリズムを使用しても、SAML ドキュメントを使用する相手側で Java 17 以降が実行されている場合、署名の検証は機能しません。
考えられる回避策は、次のようなアルゴリズムを削除することです。
-
リストから
http://www.w3.org/2000/09/xmldsig#rsa-sha1またはhttp://www.w3.org/2000/09/xmldsig#dsa-sha1を削除する -
"禁止アルゴリズム" を、ファイル
$JAVA_HOME/conf/security/java.securityのプロパティーjdk.xml.dsig.secureValidationPolicyで設定する
第6章 カスタムプロバイダーの移行 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On 7.6 と同様に、カスタムプロバイダーをデプロイメントディレクトリーにコピーすると、そのプロバイダーが Red Hat build of Keycloak にデプロイされます。Red Hat build of Keycloak では、プロバイダーを、削除された standalone/deployments の代わりに providers ディレクトリーにコピーします。追加の依存関係も providers ディレクトリーにコピーする必要があります。
Red Hat build of Keycloak はカスタムプロバイダーに個別のクラスパスを使用しないため、追加の依存関係を含める場合には、より注意する必要があります。さらに、EAR および WAR パッケージ形式、および jboss-deployment-structure.xml ファイルはサポートされなくなりました。
Red Hat Single Sign-On 7.6 はカスタムプロバイダーを自動的に検出し、Keycloak の実行中にカスタムプロバイダーをホットデプロイする機能もサポートしていましたが、この動作はサポートされなくなりました。また、providers ディレクトリー内のプロバイダーまたは依存関係を変更した後は、ビルドを実行するか、自動ビルド機能を使用してサーバーを再起動する必要があります。
プロバイダーが使用する API によっては、プロバイダーに変更を加える必要がある場合もあります。詳細は、以下のセクションを参照してください。
6.1. Java EE から Jakarta EE への移行 リンクのコピーリンクがクリップボードにコピーされました!
Keycloak のコードベースが Java EE (Enterprise Edition) から Jakarta EE に移行したことに伴い、さまざまな点が変更されました。Jakarta EE 10 をサポートするために、たとえば以下の Jakarta EE 仕様がすべてアップグレードされました。
- Jakarta Persistence 3.1
- Jakarta RESTful Web Services 3.1
- Jakarta Mail API 2.1
- Jakarta Servlet 6.0
- Jakarta Activation 2.1
Jakarta EE 10 は、クラウドネイティブの Java アプリケーションを構築するシンプルかつ先進的な軽量のアプローチを提供します。この取り組みにおける主な変更点は、javax.* から jakarta.* への名前空間の変更です。この変更は、javax.security、javax.net、javax.crypto など、JDK で直接提供される javax.* パッケージには適用されません。
さらに、セッション/ステートレス Bean などの Jakarta EE API がサポートされなくなりました。
6.2. サードパーティーの依存関係の削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、以下を含むいくつかの依存関係が削除されました。
-
openshift-rest-client -
okio-jvm -
okhttp -
commons-lang -
commons-compress -
jboss-dmr -
kotlin-stdlib
また、Red Hat build of Keycloak は EAP をベースとしていないため、EAP の依存関係のほとんどが削除されました。そのため、上記のライブラリーを、Red Hat build of Keycloak にデプロイした独自のプロバイダーの依存関係として使用する場合、それらの JAR ファイルを、Keycloak ディストリビューションの providers ディレクトリーに明示的にコピーする必要があります。
6.3. JAX-RS リソースに対するコンテキストと依存性注入の無効化 リンクのコピーリンクがクリップボードにコピーされました!
より優れたランタイムを提供し、基礎となるスタックを可能な限り活用するために、javax.ws.rs.core.Context アノテーションを使用したコンテキストデータの注入ポイントがすべて削除されました。期待されるパフォーマンスの改善点として、要求のライフサイクル中にプロキシーインスタンスを複数回作成する必要がなくなり、実行時のリフレクションコードの量が大幅に削減されることが挙げられます。
現在の要求および応答オブジェクトにアクセスする必要がある場合は、KeycloakSession から直接それらのインスタンスを取得できるようになりました。
@Context org.jboss.resteasy.spi.HttpRequest request; @Context org.jboss.resteasy.spi.HttpResponse response;
@Context
org.jboss.resteasy.spi.HttpRequest request;
@Context
org.jboss.resteasy.spi.HttpResponse response;
これは以下に置き換えられました。
KeycloakSession session = // obtain the session, which is usually available when creating a custom provider from a factory KeycloakContext context = session.getContext(); HttpRequest request = context.getHttpRequest(); HttpResponse response = context.getHttpResponse();
KeycloakSession session = // obtain the session, which is usually available when creating a custom provider from a factory
KeycloakContext context = session.getContext();
HttpRequest request = context.getHttpRequest();
HttpResponse response = context.getHttpResponse();
追加のコンテキストデータは、KeycloakContext インスタンスを通じてランタイムから取得できます。
KeycloakSession session = // obtain the session KeycloakContext context = session.getContext(); MyContextualObject myContextualObject = context.getContextObject(MyContextualObject.class);
KeycloakSession session = // obtain the session
KeycloakContext context = session.getContext();
MyContextualObject myContextualObject = context.getContextObject(MyContextualObject.class);
6.4. データプロバイダーおよびモデルの非推奨メソッド リンクのコピーリンクがクリップボードにコピーされました!
以前に非推奨となったいくつかのメソッドが、Red Hat build of Keycloak で削除されました。
-
RealmModel#searchForGroupByNameStream(String, Integer, Integer) -
UserProvider#getUsersStream(RealmModel, boolean) -
UserSessionPersisterProvider#loadUserSessions(int, int, boolean, int, String) -
Streamification 処理用に追加されたインターフェイス (
RoleMapperModel.Streamsなど) -
KeycloakModelUtils#getClientScopeMappings -
KeycloakSessionの非推奨メソッド -
UserQueryProvider#getUsersStreamメソッド
また、次のような他の変更も加えられました。
-
UserSessionProviderの一部のメソッドがUserLoginFailureProviderに移動しました。 -
フェデレーションストレージプロバイダークラスの
Streamsインターフェイスが非推奨になりました。 Streamification - インターフェイスにストリームベースのメソッドのみが含まれるようになりました。
たとえば、
GroupProviderインターフェイスの場合:@Deprecated List<GroupModel> getGroups(RealmModel realm);
@Deprecated List<GroupModel> getGroups(RealmModel realm);Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは以下に置き換えられました。
Stream<GroupModel> getGroupsStream(RealmModel realm);
Stream<GroupModel> getGroupsStream(RealmModel realm);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一貫したパラメーター順序付け -
RealmModelが常に最初のパラメーターとなるように、メソッドに対して厳密なパラメーター順序付けが行われるようになりました。たとえば、
UserLookupProviderインターフェイスの場合:@Deprecated UserModel getUserById(String id, RealmModel realm);
@Deprecated UserModel getUserById(String id, RealmModel realm);Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは以下に置き換えられました。
UserModel getUserById(RealmModel realm, String id)
UserModel getUserById(RealmModel realm, String id)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.1. 変更されたインターフェイスのリスト リンクのコピーリンクがクリップボードにコピーされました!
(o.k. は org.keycloak. パッケージを表します)
server-spiモジュール-
o.k.credential.CredentialInputUpdater -
o.k.credential.UserCredentialStore -
o.k.models.ClientProvider -
o.k.models.ClientSessionContext -
o.k.models.GroupModel -
o.k.models.GroupProvider -
o.k.models.KeyManager -
o.k.models.KeycloakSessionFactory -
o.k.models.ProtocolMapperContainerModel -
o.k.models.RealmModel -
o.k.models.RealmProvider -
o.k.models.RoleContainerModel -
o.k.models.RoleMapperModel -
o.k.models.RoleModel -
o.k.models.RoleProvider -
o.k.models.ScopeContainerModel -
o.k.models.UserCredentialManager -
o.k.models.UserModel -
o.k.models.UserProvider -
o.k.models.UserSessionProvider -
o.k.models.utils.RoleUtils -
o.k.sessions.AuthenticationSessionProvider -
o.k.storage.client.ClientLookupProvider -
o.k.storage.group.GroupLookupProvider -
o.k.storage.user.UserLookupProvider -
o.k.storage.user.UserQueryProvider
-
server-spi-privateモジュール-
o.k.events.EventQuery -
o.k.events.admin.AdminEventQuery -
o.k.keys.KeyProvider
-
6.4.2. ストレージ層でのリファクタリング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、API の使用を簡素化するために大規模なリファクタリングが行われました。これは既存のコードに影響を与えます。以下の変更の中には、既存のコードの更新が必要なものもあります。以下のセクションでさらに詳しく説明します。
6.4.2.1. モジュール構造の変更 リンクのコピーリンクがクリップボードにコピーされました!
KeycloakSession のストレージ機能に関するいくつかのパブリック API が統合されました。その一部は移動、非推奨化、または削除されました。3 つの新しいモジュールが導入され、server-spi、server-spi-private、および services モジュールのデータ指向コードがそこに移動しました。
org.keycloak:keycloak-model-legacy- User Storage API など、レガシーストアのパブリック API がすべて含まれます。
org.keycloak:keycloak-model-legacy-private-
ストレージの
*Managerクラスなど、ユーザーストレージ管理に関連するプライベート実装が含まれます。 org.keycloak:keycloak-model-legacy-services- レガシーストアで直接動作するすべての REST エンドポイントが含まれます。
たとえば、新しいモジュールに移動したクラスをカスタムユーザーストレージプロバイダーの実装で使用している場合は、依存関係を更新して上記の新しいモジュールを含める必要があります。
6.4.2.2. KeycloakSession の変更 リンクのコピーリンクがクリップボードにコピーされました!
KeycloakSession が簡素化されました。KeycloakSession のいくつかのメソッドが削除されました。
KeycloakSession セッションには、特定のオブジェクトタイプのプロバイダーを取得するためのメソッドが含まれていました。たとえば、UserProvider には、users()、userLocalStorage()、userCache()、userStorageManager()、および userFederatedStorage() があります。このような状況は、各メソッドの正確な意味を理解する必要がある開発者にとってわかりにくい可能性があります。
これらの理由により、users() メソッドのみが KeycloakSession に保持されました。上記の他のすべての呼び出しは、このメソッドで置き換える必要があります。残りのメソッドは削除されました。同じ非推奨化のパターンが、client() や groups() などの他のオブジェクト領域のメソッドにも適用されます。末尾が *StorageManager() および *LocalStorage() のメソッドはすべて削除されました。次のセクションでは、これらの呼び出しを新しい API に移行する方法、またはレガシー API を使用する方法を説明します。
6.4.3. 既存のプロバイダーの移行 リンクのコピーリンクがクリップボードにコピーされました!
削除されたメソッドを呼び出さない場合、既存のプロバイダーを移行する必要はありません。これはほとんどのプロバイダーに当てはまります。
プロバイダーが削除されたメソッドを使用しているが、ローカルストレージと非ローカルストレージに依存していない場合は、削除された userLocalStorage() から users() メソッドに呼び出しを変更するのが最適です。ここでは、セマンティクスの変更に注意してください。ローカル設定でキャッシュが有効になっている場合、新しいメソッドにキャッシュが含まれるためです。
移行前: 削除された API へのアクセスがコンパイルされない
session.userLocalStorage();
session.userLocalStorage();
移行後: 呼び出し元がレガシーストレージ API に依存していない場合、新しい API にアクセスする
session.users();
session.users();
カスタムプロバイダーが特定のプロバイダーのモードを区別する必要がある稀なケースでは、非推奨オブジェクトへのアクセスを、LegacyStoreManagers データストアプロバイダーを使用して提供します。これに該当するのは、プロバイダーがローカルストレージに直接アクセスする場合や、プロバイダーがキャッシュをスキップする場合などです。この方法は、レガシーモジュールがデプロイメントの一部である場合にのみ使用できます。
移行前: 削除された API にアクセスする
session.userLocalStorage();
session.userLocalStorage();
移行後: LegacyStoreManagers API を介して新機能にアクセスする
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
一部のユーザーストレージ関連の API は、便宜上 org.keycloak.storage.UserStorageUtil にラップされています。
6.4.4. RealmModel への変更 リンクのコピーリンクがクリップボードにコピーされました!
メソッド getUserStorageProviders、getUserStorageProvidersStream、getClientStorageProviders、getClientStorageProvidersStream、getRoleStorageProviders、および getRoleStorageProvidersStream が削除されました。これらのメソッドに依存するコードは、次のようにインスタンスをキャストする必要があります。
移行前: API が変更されたため、コードがコンパイルされない
realm.getClientStorageProvidersStream()...;
realm.getClientStorageProvidersStream()...;
移行後: インスタンスをレガシーインターフェイスにキャストする
((LegacyRealmModel) realm).getClientStorageProvidersStream()...;
((LegacyRealmModel) realm).getClientStorageProvidersStream()...;
同様に、以前 RealmModel インターフェイスを実装していて、これらのメソッドを提供するコードは、新しいインターフェイス LegacyRealmModel を実装する必要があります。このインターフェイスは RealmModel のサブインターフェイスであり、古いメソッドを含んでいます。
移行前: 古いインターフェイスをコードが実装する
public class MyClass extends RealmModel {
/* might not compile due to @Override annotations for methods no longer present
in the interface RealmModel. / / ... */
}
public class MyClass extends RealmModel {
/* might not compile due to @Override annotations for methods no longer present
in the interface RealmModel. / / ... */
}
移行後: 新しいインターフェイスをコードが実装する
public class MyClass extends LegacyRealmModel {
/* ... */
}
public class MyClass extends LegacyRealmModel {
/* ... */
}
6.4.5. UserCache インターフェイスがレガシーモジュールに移動 リンクのコピーリンクがクリップボードにコピーされました!
オブジェクトのキャッシュステータスがサービスに対して透過的になるため、インターフェイス UserCache がモジュール keycloak-model-legacy に移動しました。
レガシー実装に依存するコードは、UserCache に直接アクセスする必要があります。
移行前: コードがコンパイルされない [source,java,subs="+quotes"]
session**.userCache()**.evict(realm, user);
session**.userCache()**.evict(realm, user);
移行後: API を直接使用する
UserStorageUitl.userCache(session);
UserStorageUitl.userCache(session);
レルムの無効化をトリガーするには、UserCache API を使用する代わりに、イベントをトリガーすることを検討してください。
移行前: コードがキャッシュ API を使用する [source,java,subs="+quotes"]
UserCache cache = session.getProvider(UserCache.class); if (cache != null) cache.evict(realm)();
UserCache cache = session.getProvider(UserCache.class);
if (cache != null) cache.evict(realm)();
移行後: 無効化 API を使用する
session.invalidate(InvalidationHandler.ObjectType.REALM, realm.getId());
session.invalidate(InvalidationHandler.ObjectType.REALM, realm.getId());
6.4.6. ユーザーの認証情報管理 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーの認証情報は、以前は session.userCredentialManager().method(realm, user, ...) を使用して管理されていました。新しい方法では、user.credentialManager().method(...) を使用します。この形式は、認証情報の機能をユーザーの API に近づけるものであり、レルムとストレージに関するユーザー認証情報の場所の知識を前提としていません。
古い API は削除されました。
移行前: 削除された API にアクセスする
session.userCredentialManager().createCredential(realm, user, credentialModel)
session.userCredentialManager().createCredential(realm, user, credentialModel)
移行後: 新しい API にアクセスする
user.credentialManager().createStoredCredential(credentialModel)
user.credentialManager().createStoredCredential(credentialModel)
カスタムの UserStorageProvider の場合、UserModel を返すときに、新しいメソッド credentialManager() を実装する必要があります。このメソッドは、LegacyUserCredentialManager のインスタンスを返す必要があります。
移行前: UserModel に新しいメソッド credentialManager() が必要なため、コードがコンパイルされない
移行後: レガシーストア用の API UserModel.credentialManager() を実装する
第7章 カスタムテーマの移行 リンクのコピーリンクがクリップボードにコピーされました!
7.1. 新しい管理コンソール リンクのコピーリンクがクリップボードにコピーされました!
新しい管理コンソール (keycloak.v2) は React を使用して構築されています。古い管理コンソール (keycloak) は、少し前にサポートが終了した AngularJS 1.x で構築されていました。したがって、古いコンソールやそれを拡張するテーマから移行する方法はありません。基本テーマの管理コンソールも同じ理由でサポートされていません。
7.2. 新しいアカウントコンソール リンクのコピーリンクがクリップボードにコピーされました!
新しいアカウントコンソール (keycloak.v2) は React を使用して構築されており、より優れたユーザーエクスペリエンスを提供します。古いアカウントコンソール (keycloak) は、基本的なサーバー側テンプレートを使用して構築されていました。したがって、古いコンソールやそれを拡張するテーマから移行する方法はありません。
7.3. ログインテーマの移行 リンクのコピーリンクがクリップボードにコピーされました!
テーマは、ログインページとアカウントコンソールの外観を設定するために使用されます。
カスタムテーマを作成または更新するとき、特にテンプレートをオーバーライドするときは、ビルトインテンプレートを参考にすると便利な場合があります。これらのテンプレートは ${KC_HOME}/lib/lib/main/org.keycloak.keycloak-themes-${KC_VERSION}.jar にあり、標準の ZIP アーカイブツールを使用して開くことができます。
start-dev を使用してサーバーを開発モードで実行すると、テーマがキャッシュされないため、変更時にサーバーを再起動することなく簡単にテーマを操作できます。
カスタムテーマをインストールするには、テーマファイルを JAR ファイルとしてパッケージ化して ${KC_HOME}/providers ディレクトリーに配置するか、ファイルを ${KC_HOME}/themes ディレクトリーに直接コピーするかを選択できます。どちらの場合も、サーバーが求めるファイルおよびディレクトリー構造の詳細は、サーバー開発者ガイド を参照してください。
第8章 アップストリームの Keycloak から Red Hat build of Keycloak 24.0 への移行 リンクのコピーリンクがクリップボードにコピーされました!
バージョン 22 以降、Red Hat build of Keycloak とアップストリームの Keycloak の間にわずかな違いが存在します。相違点は次のとおりです。
- アップストリームの Keycloak の場合、配布アーティファクトは keycloak.org にあります。Red Hat build of Keycloak の場合、配布アーティファクトは Red Hat カスタマーポータル にあります。
- Oracle および MSSQL データベースドライバーは、アップストリームの Keycloak にバンドルされていますが、Red Hat build of Keycloak にはバンドルされていません。これらのドライバーをインストールする方法の詳細な手順は、データベースの設定 を参照してください。
- GELF ログハンドラーは、Red Hat build of Keycloak では使用できません。
移行プロセスは、移行する Keycloak のバージョンと Keycloak インストールのタイプによって異なります。詳細は、以下のセクションを参照してください。
8.1. Keycloak バージョンの一致 リンクのコピーリンクがクリップボードにコピーされました!
移行プロセスは、移行する Keycloak のバージョンによって異なります。
- Keycloak プロジェクトのバージョンが Red Hat build of Keycloak のバージョンと一致する場合は、Red Hat カスタマーポータル の Red Hat build of Keycloak アーティファクトを使用して Keycloak を移行します。
- Keycloak プロジェクトのバージョンが古いバージョンの場合は、Keycloak アップグレードガイド を使用して Keycloak をアップグレードし、Red Hat build of Keycloak バージョンと一致するようにします。その後、Red Hat カスタマーポータル のアーティファクトを使用して Keycloak を移行します。
- Keycloak プロジェクトのバージョンが Red Hat build of Keycloak のバージョンより大きい場合、Red Hat build of Keycloak に移行することはできません。代わりに、Red Hat build of Keycloak の新しいデプロイメントを作成するか、Red Hat build of Keycloak の今後のリリースを待ちます。
8.2. Keycloak インストールのタイプに基づく移行 リンクのコピーリンクがクリップボードにコピーされました!
一致するバージョンの Keycloak を用意したら、インストールのタイプに基づいて Keycloak を移行します。
- Keycloak を ZIP ディストリビューションからインストールした場合は、Red Hat カスタマーポータル のアーティファクトを使用して Keycloak を移行します。
- Keycloak Operator をデプロイした場合は、それをアンインストールし、Operator ガイド を使用して Red Hat build of Keycloak Operator をインストールします。CR は、アップストリームの Keycloak と Red Hat build of Keycloak との間で互換性があります。
- カスタムサーバーコンテナーイメージを作成した場合は、Red Hat build of Keycloak イメージを使用してそれを再ビルドします。コンテナー内での Keycloak の実行 を参照してください。
第9章 その他の主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
9.1. クラスパスでデフォルトで利用可能な JavaScript エンジン リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンでは、Java 17 で Keycloak を JavaScript プロバイダー (スクリプト認証システム、JavaScript 認可ポリシー、または OIDC および SAML クライアント用のスクリプトプロトコルマッパー) とともに使用する場合、JavaScript エンジンをディストリビューションにコピーする必要がありました。これは不要になりました。Red Hat build of Keycloak サーバーでは、Nashorn JavaScript エンジンをデフォルトで利用できるためです。スクリプトプロバイダーをデプロイする場合、Nashorn のスクリプトエンジンとその依存関係を Red Hat build of Keycloak ディストリビューションにコピーしないことを推奨します。
9.2. 名前が変更された Keycloak 管理クライアントアーティファクト リンクのコピーリンクがクリップボードにコピーされました!
Jakarta EE へのアップグレードを経て、Keycloak 管理クライアントのアーティファクトが、長期的な保守性を考慮して、よりわかりやすい名前に変更されました。ただし、2 つの別個の Keycloak 管理クライアントが引き続き存在しています。1 つは Jakarta EE のサポートを備え、もう 1 つは Java EE のサポートを備えています。
org.keycloak:keycloak-admin-client-jakarta アーティファクトはリリースされなくなりました。Jakarta EE のサポートを備えたデフォルトの Keycloak 管理クライアントは、org.keycloak:keycloak-admin-client (バージョン 24.0.0 以降) です。
Java EE のサポートを備えた新しいアーティファクトは、org.keycloak:keycloak-admin-client-jee です。
9.2.1. Jakarta EE のサポート リンクのコピーリンクがクリップボードにコピーされました!
Java EE のサポートを備えた新しいアーティファクトは、org.keycloak:keycloak-admin-client-jee です。Jakarta EE のサポート
移行前:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client-jakarta</artifactId>
<version>18.0.0.redhat-00001</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client-jakarta</artifactId>
<version>18.0.0.redhat-00001</version>
</dependency>
移行後:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>22.0.0.redhat-00001</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>22.0.0.redhat-00001</version>
</dependency>
9.2.2. Java EE のサポート リンクのコピーリンクがクリップボードにコピーされました!
移行前:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>18.0.0.redhat-00001</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client</artifactId>
<version>18.0.0.redhat-00001</version>
</dependency>
移行後:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client-jee</artifactId>
<version>22.0.0.redhat-00001</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-admin-client-jee</artifactId>
<version>22.0.0.redhat-00001</version>
</dependency>
9.3. クライアントの Advanced Settings コンボからの Never expires オプションの削除 リンクのコピーリンクがクリップボードにコピーされました!
Never expires オプションが Advanced Settings クライアントタブのすべてのコンボから削除されました。各種の有効期間やアイドルタイムアウトは、無期限ではなく、一般的なユーザーセッションやレルム値によって制限されるため、このオプションは誤解を招いていました。したがって、このオプションは残りの 2 つのオプションである Inherits from the realm settings (一般的なレルムタイムアウトがクライアントで使用される) と Expires in (値がクライアントでオーバーライドされる) のために削除されました。内部的には、Never expires は -1 で表されていました。この値は管理コンソールに警告とともに表示されるようになり、管理者が直接設定することはできません。
9.4. メールアドレスの新しいルールおよび制限の検証 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak に、メールアドレス作成に関する新しいルールが追加され、メールアドレス作成時に ASCII 文字を使用できるようになりました。また、メールアドレスのローカル部分 (@ の前) に対して 64 文字の制限が新しく設けられました。そのため、下位互換性を考慮してメールアドレスのローカル部分の最大長を設定するために、新しいパラメーター --spi-user-profile-declarative-user-profile-max-email-local-part-length が追加されました。デフォルト値は 64 です。
kc.sh start --spi-user-profile-declarative-user-profile-max-email-local-part-length=100
kc.sh start --spi-user-profile-declarative-user-profile-max-email-local-part-length=100