第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. JBoss EAP OpenID Connect アダプターのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
OIDC でサポートされるアダプターは、JBoss EAP 8.0 によって提供されます。Web アプリケーションにコピーされた JBoss EAP OIDC アダプターをアップグレードするには、次の手順を実行します。
-
EAP_HOME/modules/system/add-ons/keycloak/ディレクトリーを削除して、以前のアダプターモジュールを削除します。 - JBoss EAP 8.0 が提供する OIDC クライアントをインストールします。詳細は、OIDC によるアプリケーションの保護 を参照してください。
5.1.2. OpenID Connect プロトコルとクライアント設定の主な変更点 リンクのコピーリンクがクリップボードにコピーされました!
- 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 では直接使用できません。
- 有効なリダイレクト URI の検証スキームの変更
- アプリケーションクライアントが http(s) 以外のカスタムスキームを使用している場合、有効なリダイレクトパターンでそのスキームを明示的に許可することが検証に必要になりました。カスタムスキームを許可するパターンの例には、custom:/test、custom:/test/*、custom: などがあります。セキュリティー上の理由から、* などの一般的なパターンは、これらのスキームに対して無効になりました。
- 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.3. Valid Post Logout Redirect URI リンクのコピーリンクがクリップボードにコピーされました!
Valid Post Logout Redirect URIs 設定オプションが OIDC クライアントに追加されました。これは、OIDC 仕様に準拠しています。ログインおよびログアウト後のリダイレクトには、別のリダイレクト URI セットを使用できます。Valid Post Logout Redirect URIs に使用される値 + は、Valid Redirect URIs オプションで指定されたのと同じリダイレクト URI のセットがログアウトに使用されることを意味します。この変更は、下位互換性のため、以前のバージョンから移行するときのデフォルトの動作にも一致します。
次のセクションでは、UserInfo エンドポイントの変更について説明します。
- エラー応答の変更
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
- UserInfo エンドポイントに対するその他の変更
アクセストークンに
openidスコープが必要になりました。これは、OAuth 2.0 ではなく OpenID Connect に固有の機能である UserInfo によって規定されています。openidスコープがトークンにない場合、要求が403 Forbiddenとして拒否されます。前のセクションを参照してください。UserInfo がユーザーのステータスをチェックするようになり、ユーザーが無効な場合は、
invalid_token応答を返すようになりました。- Service Account Client のデフォルト Client ID マッパーの変更
Service Account ClientのデフォルトのClient IDマッパーが変更されました。Token Claim Nameフィールドの値がclientIdからclient_idに変更されました。client_idクレームは OAuth2 仕様に準拠しています。- JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens
- OAuth 2.0 Token Introspection
clientIduserSession ノートは引き続き存在します。
- 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パラメーターの追加を回避できます。