第8章 クライアントの管理
クライアントは、ユーザーの認証を要求できるエンティティーです。クライアントは 2 つの形式で提供されます。クライアントの最初のタイプは、single-sign-on に参加するアプリケーションです。これらのクライアントは、Red Hat Single Sign-On によるセキュリティーの提供のみを行います。他のタイプのクライアントは、認証されたユーザーの代わりに他のサービスを呼び出すことができるように、アクセストークンを要求するものです。このセクションでは、クライアントの設定に関するさまざまな側面と、その方法について説明します。
8.1. OIDC クライアント
アプリケーションのセキュリティーを保護するために OpenID Connect が推奨されるプロトコルです。ギャラウンドから Web フレンドリーになり、HTML5/JavaScript のアプリケーションで最適となるように設計されました。
OIDC クライアントを作成するには、左メニュー項目 Clients
に移動します。このページでは、右側に Create
ボタンが表示されます。
Clients
これにより、Add Client
ページが表示されます。
クライアントの追加
クライアントの クライアント ID
を入力します。これは、リクエストで使用する単純な英数字の文字列で、Red Hat Single Sign-On データベースにおいてクライアントを特定します。次に、Client Protocol
ドロップダウンメニューで openid-connect
を選択します。最後に、Root URL
フィールドにアプリケーションのベース URL を入力し、Save
をクリックします。これでクライアントが作成され、クライアント Settings
タブが表示されます。
クライアントの設定
このページの設定アイテムを追って説明します。
クライアント ID
これは、OIDC 要求のクライアント識別子として使用される英数字の文字列を指定します。
名前
これは、Red Hat Single Sign-On UI 画面に表示されるたびに、クライアントの表示名です。代替文字列の値 (例: ${myapp}) を設定して、このフィールドの値をローカライズできます。詳細は、『サーバー開発者ガイド』を参照してください。
説明
これはクライアントの説明を指定します。これはローカライズすることもできます。
有効
これがオフになると、クライアントは認証を要求することができません。
Consent Required
これがオンの場合、ユーザーにはそのアプリケーションへのアクセス権限を付与するかどうかをユーザーに尋ねるメッセージが表示されます。また、クライアントがアクセスする情報を正確に認識できるように、クライアントの対象となるメタデータも表示します。Google へのソーシャルログインを行った場合には、多くの場合、同様のページが表示されます。Red Hat Single Sign-On は同じ機能を提供します。
アクセスタイプ
これは OIDC クライアントのタイプを定義します。
- confidential
- 機密性の高いアクセスタイプは、ブラウザーログインを実行し、アクセスコードをアクセストークンに変換する際にクライアントシークレットを必要とするサーバー側のクライアントタイプです (詳細は、OAuth 2.0 仕様の「Access Token Request」を参照してください)。このタイプはサーバー側のアプリケーションに使用する必要があります。
- public
- パブリックアクセスタイプは、ブラウザーログインの実行に必要なクライアント側のクライアント向けです。クライアント側のアプリケーションの場合、シークレットを安全に維持することはできません。代わりに、クライアントの正しいリダイレクト URI を設定してアクセスを制限することが非常に重要です。
- bearer-only
- ベアラーのみのアクセスタイプは、アプリケーションがベアラートークン要求のみを許可することを意味します。これがオンの場合、このアプリケーションはブラウザーログインに参加できません。
Standard Flow Enabled
これが置かれている場合、クライアントは OIDC 認証コードフローを使用できます。
Implicit Flow Enabled
これがオンの場合、クライアントは OIDC Implicit Flow を使用できます。
Direct Access Grants Enabled
これが置かれている場合、クライアントは OIDC Direct Access Grants を使用することができます。
Root URL
Red Hat Single Sign-On で設定された相対 URL が使用される場合、この値はそれらの先頭に追加されます。
Valid Redirect URIs
これは必須フィールドです。URL パターンに入力し、+ 記号をクリックして追加します。削除する URL の横にある - 記号をクリックします。Save
ボタンをクリックする必要があることに注意してください。ワイルドカード (*) は URI の最後にのみ許可されます (例: http://host.com/*)。
有効なリダイレクト URI パターンを登録する場合には、追加の注意を払う必要があります。一般的に使用すると、攻撃を受けやすくなります。詳細は、「Threat Model Mitigation」の章を参照してください。
Base URL
Red Hat Single Sign-On がクライアントへのリンクが必要な場合は、この URL が使用されます。
Admin URL
Red Hat Single Sign-On 固有のクライアントアダプターでは、これはクライアントのコールバックエンドポイントになります。Red Hat Single Sign-On サーバーは、この URI を使用して、失効ポリシーのプッシュ、バックチャネルログアウトなどのコールバックを行います。Red Hat Single Sign-On サーブレットアダプターでは、サーブレットアプリケーションのルート URL を使用できます。詳細は、『アプリケーションおよびサービスガイド』を参照してください。
Web Origins
このオプションは、Cross-Origin Resource Sharing で構成される CORS を中心とします。ブラウザー JavaScript が、ドメインが JavaScript コードのいずれかとは異なるサーバーに AJAX HTTP リクエストを作成しようとする場合、リクエストは CORS を使用する必要があります。サーバーは特別な方法で CORS リクエストを処理する必要があります。処理しないと、ブラウザーは表示されず、リクエストの処理を許可しません。このプロトコルは、XSS、CSRF、およびその他の JavaScript ベースの攻撃を保護するために存在します。
Red Hat Single Sign-On は、検証された CORS リクエストをサポートします。これは、クライアントの Web Origins
設定に一覧表示されるドメインがクライアントアプリケーションに送信されるアクセストークン内に組み込まれる仕組みになります。その後、クライアントアプリケーションはこの情報を使用して、CORS リクエストの呼び出しを許可するかどうかを決定します。これは OIDC プロトコルへの拡張であるため、Red Hat Single Sign-On クライアントアダプターのみがこの機能をサポートします。詳細は、『アプリケーションおよびサービスガイド』を参照してください。
Web Origins
データを入力するには、ベース URL を入力し、+ 記号をクリックして追加します。削除する URL の横にある - 記号をクリックします。Save
ボタンをクリックする必要があることに注意してください。
8.1.1. 詳細設定
OAuth 2.0 Mutual TLS Certificate Bound Access Tokens Enabled
相互 TLS は、TLS ハンドシェイク時に交換されるクライアント証明書でアクセストークンおよび更新トークンをバインドします。これにより、これらのトークンを盗む方法を見つけた攻撃者がトークンを取得することができなくなります。この種類のトークンは holder-of-key トークンと呼ばれます。ベアラートークンとは異なり、holder-of-key トークンの受信側は、トークンの送信側が正当であるかどうかを検証できます。
トークンリクエストで以下の条件が満たされると、Red Hat Single Sign-On はアクセストークンをバインドし、クライアント証明書で更新トークンを取得し、それらを holder-of-key トークンとして発行します。すべての条件が満たされないと、Red Hat Single Sign-On はトークンリクエストを拒否します。
- この機能はオンになっています。
- トークンリクエストが、認可コードフローまたはハイブリッドフローのトークンエンドポイントに送信されます。
- TLS ハンドシェイクでは、Red Hat Single Sign-On がクライアント証明書を要求し、クライアントがクライアント証明書を送信します。
- TLS ハンドシェイクで Red Hat Single Sign-On がクライアント証明書を正常に検証しました。
Red Hat Single Sign-On で相互 TLS を有効にするには、「WildFly で相互 SSL の有効化」を参照してください。
以下の場合には、Red Hat Single Sign-On はアクセストークンまたは更新トークンを送信するクライアントを検証します。検証に失敗すると、Red Hat Single Sign-On はトークンを拒否します。
- トークンの更新リクエストは、holder-of-key 更新トークンでトークンエンドポイントに送信されます。
- UserInfo リクエストは、holder-of-key アクセストークンで UserInfo エンドポイントに送信されます。
- ログアウトリクエストは、holder-of-key 更新トークンで Logout エンドポイントに送信されます。
詳細は、OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens の「Mutual TLS Client Certificate Bound Access Tokens」を参照してください。
keycloak クライアントアダプターのいずれも、現在 holder-of-key トークン検証をサポートします。代わりに、keycloak アダプターは現在アクセスおよび更新トークンをベアラートークンとして扱います。
Proof Key for Code Exchange (PKCE)
攻撃者が正当なクライアントに発行した認可コードを盗むと、PKCE は攻撃者がそのコードに適用されるトークンを受信するのを防ぎます。
管理者は以下の 3 つのオプションを選択できます。
Proof Key for Code Exchange Code Challenge Method
- (blank): クライアントが PKCE のパラメーターを Red Hat Single Sign-On の承認エンドポイントに正しく送信しない限り、Red Hat Single Sign-On は PKCE を適用しません。これはデフォルトの設定です。
- S256: Red Hat Single Sign-On は、コードのチャレンジメソッドが S256 であるクライアント PKCE に適用されます。
- plain: Red Hat Single Sign-On は、コードのチャレンジメソッドが plain のクライアント PKCE に適用されます。
詳細は、OAuth パブリッククライアントによるコード Exchange の RFC 7636 Proof キー を参照してください。
Signed and Encrypted ID Token Support
Red Hat Single Sign-On は、Json Web Encryption (JWE) 仕様に従って ID トークンを暗号化できます。管理者は、クライアントごとに ID トークンの暗号化を行うかどうかを決定できます。この機能は、デフォルトでは無効になっています。
ID トークンを暗号化するキーは、コンテンツ暗号化キー (CEK) と呼ばれます。Red Hat Single Sign-On およびクライアントは、どの CEK が使用されるかと、その配信方法をネゴシエートする必要があります。これを行うには Key Management Mode と呼ばれます。
JWE 仕様は、キー管理モード の 5 種類のキー管理モードを決定します。Red Hat Single Sign-On は、その中における鍵暗号化をサポートします。
Key Encryption では、クライアントは非対称暗号のペアを生成します。公開鍵は CEK の暗号化に使用されます。Red Hat Single Sign-On は、ID トークンごとに CEK を生成し、この生成された CEK で ID トークンを暗号化し、このクライアントの公開鍵でこの CEK を暗号化します。クライアントはこの暗号化された CEK を秘密鍵で復号化し、CEK を復号化して ID トークンを復号化します。そのため、クライアント以外のユーザーは ID トークンを復号化できません。
クライアントは、CEK を Red Hat Single Sign-On で暗号化するために公開鍵を渡す必要があります。Red Hat Single Sign-On は、クライアントが提供する URL からの公開鍵のダウンロードをサポートします。クライアントは、Json Web Keys (JWK) 仕様に従って公開鍵を提供する必要があります。これを実行する方法は、「Confidential Client Credentials」の「Signed JWT
」で定義します。詳細な手順は以下のとおりです。
-
クライアントの
Credentials
タブを開きます。 -
Client Authenticator
プルダウンメニューからSigned Jwt
を選択します。 -
ON を
JWKS URL
スイッチに設定 -
JWKS URL
テキストボックスに URL を提供するクライアントの公開鍵を入力します。
キー暗号化のアルゴリズムは、Json Web Algorithm (JWA) 仕様で定義されています。Red Hat Single Sign-On は、デフォルトパラメーター (RSA-OAEP) を使用して RSAES-PKCS1-v1_5 (RSA1_5) および RSAES OAEP をサポートします。このアルゴリズムを選択する詳細な手順は以下のとおりです。
-
クライアントの
Settings
タブを開きます。 -
詳細設定の表示
を開きます。 -
ID Token Encryption Key Management Algorithm
プルダウンメニューからRSA1_5
またはRSA-OAEP
を選択します。
CEK による ID トークン暗号化アルゴリズムは、JWA 仕様にも定義されます。Red Hat Single Sign-On は、128 ビットキー (A128GCM) を使用した AES_128_CBC_HMAC_SHA_256 認証暗号化 (A128CBC-HS256) および AES GCM に対応しています。このアルゴリズムを選択する詳細な手順は以下のとおりです。
-
クライアントの
Settings
タブを開きます。 -
詳細設定の表示
を開きます。 -
ID Token Encryption Content Encryption Algorithm
プルダウンメニューからA128CBC-HS256
またはA128GCM
を選択します。
8.1.2. 機密クライアント認証情報
クライアントの Settings
タブでクライアントの access type を confidential
に設定した場合は、新しい Credentials
タブが表示されます。このようなクライアントの処理の一環として、クライアントのクレデンシャルを設定する必要があります。
認証情報タブ
Client Authenticator
リストボックスは、機密クライアントに使用する認証情報のタイプを指定します。デフォルトはクライアント ID およびシークレットになります。シークレットは自動的に生成され、Regenerate Secret
ボタンを使用すると、必要に応じてこのシークレットを再作成します。
または、シークレットではなく、署名済みの Json Web Token (JWT) または x509 証明書の検証 (別名 Mutual TLS) を使用することができます。
署名付き JWT
この認証情報タイプを選択すると、クライアントの秘密鍵と証明書も生成する必要があります。秘密鍵は JWT に署名するために使用されます。一方、証明書は、署名の検証にサーバーによって使用されます。Generate new keys and certificate
ボタンをクリックして、このプロセスを開始します。
キーの生成
これらのキーを生成すると、Red Hat Single Sign-On は証明書を保存し、クライアントが使用する秘密鍵と証明書をダウンロードする必要があります。必要なアーカイブ形式を選択し、秘密鍵とストアのパスワードを指定します。
外部ツールを使用してこれらを生成したり、クライアントの証明書をインポートするだけです。
証明書のインポート
インポートできる形式は複数あります。証明書を保存するアーカイブ形式を選択し、ファイルを選択してから Import
ボタンをクリックします。
最後に、JWKS URL の使用
を選択している場合は、証明書をインポートする必要はありません。このような場合には、クライアントが JWK 形式で公開鍵を公開する URL を指定できます。Red Hat Single Sign-On 側では、クライアントがキーを変更すると、Red Hat Single Sign-On 側ですべてのキーを再インポートする必要がないため、柔軟性があります。
Red Hat Single Sign-On アダプターで保護されたクライアントを使用している場合は、https://myhost.com/myapp がクライアントアプリケーションのルート URL であると仮定して、https://myhost.com/myapp/k_jwks のように JWKS の URL を設定することができます。詳細は『サーバー開発者ガイド』を参照してください。
パフォーマンス上、Red Hat Single Sign-On は OIDC クライアントの公開鍵をキャッシュします。クライアントの秘密鍵が危険にさらされたと思われる場合は、キーの更新は明らかですが、キーの更新も適切です。詳細は、「キャッシュの消去」セクションを参照してください。
クライアントシークレットでの署名済み JWT
Client Authenticator
リストボックスでこのオプションを選択すると、秘密鍵の代わりに、クライアントシークレットで JWT が署名した JWT を使用できます。
このクライアントシークレットは、クライアントによって JWT に署名するために使用されます。
X509 証明書
このオプションを有効にすると、クライアントが TLS Handshake 時に適切な X509 証明書を使用する場合に Red Hat Single Sign-On を検証します。
このオプションには、Red Hat Single Sign-On での相互 TLS が必要です。『WildFly での相互 SSL の有効化』を参照してください。
X509 証明書
バリデーターは、証明書の Subject DN フィールドも、regexp 検証式を設定して確認します。いくつかのユースケースでは、すべての証明書を受け入れるだけで十分です。この場合は、(.*?)(?:$)
式を使用できます。
Red Hat Single Sign-On がリクエストからクライアント ID を取得する方法は 2 つあります。最初のオプションはクエリーの client_id
パラメーターです (OAuth 2.0 仕様 のセクション 2.2 で説明されています)。2 つ目の方法として、client_id
をフォームパラメーターとして指定します。
8.1.3. サービスアカウント
各 OIDC クライアントには、アクセストークンの取得を可能にする組み込み service account があります。これは、「クライアント認証情報の付与」の OAuth 2.0 仕様で説明されています。この機能を使用するには、クライアントの Access Type を confidential
に設定する必要があります。これを実行すると、Service Accounts Enabled
スイッチが表示されます。このスイッチをオンにする必要があります。また、クライアントのクレデンシャルを設定されていることを確認してください。
このクライアントを使用するには、有効な confidential
Client を登録する必要があります。また、このクライアントでは、Red Hat Single Sign-On 管理コンソールでスイッチ Service Accounts Enabled
を確認する必要があります。Service Account Roles
タブは、このクライアントの代わりに取得したサービスアカウントで利用可能なロールを設定できます。Full Scope Allowed
が許可されていない限り、このクライアントのロールスコープマッピング (Scope
タブで利用可能なロールを持っている必要があることを覚えておいてください。通常のログインでは、アクセストークンからのロールは以下の交差部分になります。
- 特定のクライアントのロールスコープと、リンクされたクライアントスコープから継承されたロールスコープのマッピング
- サービスアカウントロール
呼び出す REST URL は /auth/realms/{realm-name}/protocol/openid-connect/token
です。この URL の呼び出しは POST リクエストで、クライアントクレデンシャルを投稿する必要があります。デフォルトでは、クライアント認証情報は Authorization: Basic
ヘッダーでクライアントの clientId および clientSecret によって表されますが、署名付きの JWT アサーションやその他のクライアント認証用のカスタムメカニズムを使ってクライアントを認証することもできます。OAuth2 仕様に従って、grant_type=client_credentials
パラメーターを使用する必要があります。
たとえば、サービスアカウントを取得する POST 呼び出しは以下のようになります。
POST /auth/realms/demo/protocol/openid-connect/token Authorization: Basic cHJvZHVjdC1zYS1jbGllbnQ6cGFzc3dvcmQ= Content-Type: application/x-www-form-urlencoded grant_type=client_credentials
応答は、OAuth 2.0 仕様の標準の JSON ドキュメントです。
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"bearer", "expires_in":60 }
デフォルトでは、アクセストークンのみが返されます。更新トークンが返されず、認証の成功時に Red Hat Single Sign-On 側でユーザーセッションも作成されません。更新トークンがないため、アクセストークンの期限が切れると再認証が必要ですが、セッションはデフォルトで作成されないため、Red Hat Single Sign-On サーバー側で追加のオーバーヘッドは保証されません。
このような状況では、ログアウトは必要ありません。ただし、発行されたアクセストークンは、「OpenID Connect Endpoints」セクションで説明するように、OAuth2 Revocation Endpoint にリクエストを送信して取り消すことができます。
8.1.4. オーディエンス語のサポート
Red Hat Single Sign-On がデプロイされる典型的な環境は、一般的に、認証に Red Hat Single Sign-On を使用する 秘密 または 公開 クライアントアプリケーション (フロントエンドクライアントアプリケーション) のセットで構成されています。
また、フロントエンドクライアントアプリケーションからの要求に対応し、リソースを提供する サービス (OAuth 2 仕様では Resource Servers と呼ばれる) もあります。これらのサービスは通常、特定のリクエストに対して認証を行うために、アクセストークン (Bearer トークン) を送信する必要があります。このトークンは、Red Hat Single Sign-On へのログインを試みる際に、フロントエンドアプリケーションによって取得されていました。
サービス間の信頼が低い環境では、以下のシナリオが発生する可能性があります。
-
my-app
という名前のフロントエンドクライアントは、Red Hat Single Sign-On に対して認証される必要があります。 -
ユーザーが Red Hat Single Sign-On で認証されています。Red Hat Single Sign-On は、
my-app
アプリケーションにトークンを発行しました。 -
アプリケーション
my-app
は、トークンを使用してサービスevil-service
を呼び出しました。このサービスは、非常に有用なデータを提供できるので、このアプリケーションはevil-service
を呼び出す必要があります。 -
evil-service
アプリケーションは、my-app
に応答を返しました。ただし、同時に、以前に送信されたトークンが保持されていました。 -
次に、
evil-service
は、以前に保持したトークンで、good-service
と呼ばれる別のサービスを呼び出していました。呼び出しに成功し、good-service
がデータを返しました。悪意のあるサービス
がトークンを悪用してクライアントmy-app
に代わって他のサービスにアクセスするため、セキュリティーが損なわれます。
このフローは、サービス間の信頼レベルの高い環境においては問題になる可能性があります。ただし、サービス間の信頼が低くなる他の環境では、この問題が発生する可能性があります。
いくつかの環境では、要求されたデータを元の呼び出し元 (my-appクライアント) に適切に返すためにevil-service
が good-service
から追加データを取得する必要がある場合があるため、このワークフロー例は要求された動作である場合もあります。Kerberos 認証情報の委譲と同様の意味があります。Kerberos 認証情報の委譲と同様に、無制限のオーディエンスは、サービス間で高レベルに存在する場合にのみ役立つので、十分に大きなオーディエンスになります。それ以外の場合は、以下で説明されているようにオーディエンスを制限することが推奨されます。対象を制限できます。同時に、evil-service
が good-service
から必要なデータを取得できるようにします。この場合、evil-service
および good-service
の両方が対象としてトークンに追加されることを確認する必要があります。
上記の例にあるように、アクセストークンが誤用しないようにするため、トークンでオーディエンスを制限し、トークンに関するオーディエンスを検証するようにサービスを設定することを推奨します。これが実行されると、以下のように上のフローが変更されます。
-
my-app
という名前のフロントエンドクライアントは、Red Hat Single Sign-On に対して認証される必要があります。 -
ユーザーが Red Hat Single Sign-On で認証されています。Red Hat Single Sign-On は、
my-app
アプリケーションにトークンを発行しました。クライアントアプリケーションは、evil-service
サービスを呼び出す必要があることをすでに認識しているため、Red Hat Single Sign-Onサーバーに送信される認証リクエストでscope=evil-service
を使用しました。scope パラメーターの詳細は、「Client Scopes section」を参照してください。my-app
クライアントに発行されたトークンには、"audience": [ "evil-service" ]
のようにオーディエンスが含まれています。このアクセストークンは、クライアントがこのアクセストークンを使用してevil-service
サービスを呼び出すことを望んでいることを宣言しています。 -
evil-service
アプリケーションは、my-app
にリクエストを提供していました。同時に、そのトークンに送信したトークンを保持します。 -
その後、以前に保持したトークンを使用して
good-service
を呼び出したevil-service
アプリケーションが起動しました。good-service
はトークンのオーディエンスをチェックし、オーディエンスはevil-service
のみであることを確認しているため、呼び出しは成功しませんでした。これは想定内の動作であり、セキュリティーが破損していません。
クライアントが後で good-service
を呼び出す場合は、scope=good-service
で SSO ログインを発行し、別のトークンを取得する必要があります。返されるトークンには、対象として good-service
が含まれます。
"audience": [ "good-service" ]
さらに、good-service
を呼び出すことができます。
8.1.4.1. setup
オーディエンスのチェックを適切に設定するには、以下を実行します。
- アダプター構成に verify-token-audience フラグを追加して、サービスが送信されたアクセストークンのオーディエンスを確認するように構成されていることを確認します。詳細は「アダプターの設定」を参照してください。
- アクセストークンが Red Hat Single Sign-On により発行される際に、要求されたオーディエンスがすべて含まれ、不要なオーディエンスが含まれていないことを確認します。この対象は、次のセクション で説明されているようにクライアントロールによって自動的に追加することも、以下 のようにハードコーディングすることもできます。
8.1.4.2. オーディエンスの自動追加
デフォルトのクライアントスコープ ロール には 、Audience Resolve プロトコルマッパーが定義されています。このプロトコルマッパーは、現在のトークンが利用可能なクライアントロール 1 つ以上があるクライアントをすべてチェックします。その後、それらの各クライアントのクライアント ID が自動的にオーディエンスとして追加されます。これは、サービス (通常はベアラーのみ) クライアントがクライアントのロールに依存する場合に便利です。
たとえば、Bearer 専用のクライアント good-service
と、機密クライアント my-app
があり、そのクライアントを認証し、my-app
に発行されたアクセストークンを使用して good-service
の REST サービスを呼び出したいとします。true の場合:
-
good-service
クライアントには、クライアントロール自体で定義されているクライアントロールがあります - ターゲットユーザーには、少なくとも 1 つのクライアントロールが割り当てられています
-
my-app
クライアントには、割り当てられたロールのロールスコープのマッピングがあります。
次に、good-service
は、my-app
に発行されたアクセストークンに対して自動的にオーディエンスとして追加されます。
オーディエンスが自動的に追加されないようにする必要がある場合は、ロールスコープマッピングを my-app
クライアントに直接設定しないでください。代わりに、good-service
など、専用のクライアントスコープ作成します。これには、good-service
クライアントのクライアントロールのロールスコープのマッピングが含まれます。このクライアントスコープが任意のクライアントスコープとして my-app
クライアントに追加されると仮定すると、client ロールとオーディエンスが、scope=good-service
パラメーターで明示的に要求されている場合に限り、クライアントロールとオーディエンスがトークンに追加されます。
フロントエンドクライアント自体は、アクセストークンの対象に自動的に追加されます。アクセストークンにはトークンがオーディエンスとして発行されたクライアントが含まれていないため、アクセストークンと ID トークン間で簡単に区別できます。上記の例では、my-app
はオーディエンスとして追加されません。クライアント自体をオーディエンスとして必要な場合は、ハードコーディングされたオーディエンスオプションを参照してください。ただし、フロントエンドと REST サービスと同じクライアントを使用することは推奨されていません。
8.1.4.3. ハードコードされたオーディエンス
サービスがレルムロールに依存する場合や、トークンのロールに依存しない場合は、ハードコーディングされたオーディエンスを使用すると便利です。これはプロトコルマッパーで、指定されたサービスクライアントのクライアント ID をトークンに追加します。クライアント ID とは異なる対象が必要な場合は、一部の URL などのカスタム値を使用することもできます。
プロトコルマッパーはフロントエンドクライアントに直接追加できますが、オーディエンスは常に追加されます。より粒度の細かい制御が必要な場合は、専用のクライアントスコープでプロトコルマッパーを作成することができます。これは、good-service
などで呼び出されます。
オーディエンスプロトコルマッパー
-
good-service
クライアントの インストールタブ から、アダプタの構成を生成し、verify-token-audience オプションが true に設定されていることを確認することができます。これは、この生成された設定を使用する場合にアダプターがオーディエンスを確認する必要があることを示します。 -
最後に、
my-app
フロントエンドクライアントがトークン内の対象として適切なサービス
を要求できるようにする必要があります。my-app
クライアントで、Client Scopes タブをクリックします。次に、good-service
をオプション (またはデフォルト) クライアント範囲として割り当てます。詳細は、「クライアントスコープのリンク」セクションを参照してください。 -
必要に応じて、クライアントスコープを評価 し、サンプルアクセストークンを生成することができます。その場合、任意のクライアントスコープとして指定した場合、
good-service
が scope パラメーターに含まれている場合に限り、生成されたアクセストークンの対象者にgood-service
が追加されることに注意してください。 -
my-app
アプリケーションでは、good-service
にアクセスするためのトークンを発行する際に、scope パラメーターをgood-service
の値と共に使用することを確認する必要があります。アプリケーションがサーブレットアダプターを使用している場合は、「パラメーター転送セクション」を参照してください。また、アプリケーションが JavaScript アダプターを使用している場合は、「JavaScript アダプターセクション」を参照してください。
トークンの正しい対象およびロールが分からない場合は、管理コンソールで クライアントスコープを評価 し、テストを行うとよいでしょう。
Audience および Audience Resolve プロトコルマッパーの両方はデフォルトで、対象をアクセストークンに追加します。ID トークンには通常、トークンが発行されたクライアントのクライアント ID である単一のオーディエンスのみが含まれます。これは、OpenID Connect 仕様の要件です。一方、アクセストークンには、オーディエンスマッパーが追加されない限り、発行されたトークンであるクライアントのクライアント ID があるとは限りません。