8.5. 参加者トークンの要求
要求者トークン (RPT) は、JSON Web 署名 (JWS) を使用してデジタル署名された JSON Web トークン (JWT) です。トークンは、Red Hat Single Sign-On が以前に発行した OAuth2 アクセストークンに基づいて、ユーザーまたは自身の代わってくる特定のクライアントに対して作成されます。
RPT をデコードすると、以下のようなペイロードが表示されます。
このトークンから、サーバーから付与されたすべてのパーミッションを permissions 要求から取得できます。
また、パーミッションは、実際に付与して、これらの同じ権限を発行するために使用されたアクセス制御メソッドから保護および完全に分離しているリソース/スコープと直接関連する点にご留意ください。
8.5.1. 要求するトークンのイントロスペクション リンクのコピーリンクがクリップボードにコピーされました!
場合によっては、リクエスト側のトークン (RPT) をイントロスペクションして、トークン内のパーミッションを確認するか、リソースサーバー側の認可決定を実施したい場合があります。
トークンイントロスペクションが役立つ主なユースケースは 2 つあります。
- クライアントアプリケーションがトークンの有効性をクエリーして、同じまたは追加のパーミッションを持つ新しいパーミッションを取得する必要がある場合は、
- リソースサーバーで認可の決定を強制する場合 (特に組み込みの ポリシーエンフォーサー がお使いのアプリケーションに適さない場合)
8.5.2. RPT に関する情報の取得 リンクのコピーリンクがクリップボードにコピーされました!
トークンイントロスペクションは基本的に OAuth2 トークンイントロスペクション に準拠するエンドポイントであり、そこから RPT に関する情報を取得できます。
http://${host}:${port}/auth/realms/${realm_name}/protocol/openid-connect/token/introspect
http://${host}:${port}/auth/realms/${realm_name}/protocol/openid-connect/token/introspect
このエンドポイントを使用して RPT をイントロスペクションするには、以下のようにサーバーにリクエストを送信します。
curl -X POST \
-H "Authorization: Basic aGVsbG8td29ybGQtYXV0aHotc2VydmljZTpzZWNyZXQ=" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'token_type_hint=requesting_party_token&token=${RPT}' \
"http://localhost:8080/auth/realms/hello-world-authz/protocol/openid-connect/token/introspect"
curl -X POST \
-H "Authorization: Basic aGVsbG8td29ybGQtYXV0aHotc2VydmljZTpzZWNyZXQ=" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'token_type_hint=requesting_party_token&token=${RPT}' \
"http://localhost:8080/auth/realms/hello-world-authz/protocol/openid-connect/token/introspect"
上記の要求は HTTP BASIC を使用し、クライアントのクレデンシャル (クライアント ID およびシークレット) を渡して、トークンのイントロスペクションを試みるクライアントを認証しますが、Red Hat Single Sign-On でサポートされる他のクライアント認証方法を使用できます。
イントロスペクションエンドポイントには 2 つのパラメーターが必要です。
token_type_hint
このパラメーターの値として requesting_party_token を使用します。これは、RPT をイントロスペクションする必要があることを示します。
token
このパラメーターの値として、認可プロセス中にサーバーが返したためトークン文字列を使用します。
その結果、サーバーの応答は以下のようになります。
RPT がアクティブでない場合は、代わりに以下の応答が返されます。
{
"active": false
}
{
"active": false
}
8.5.3. RPT をイントロスペクションするたびにサーバーを呼び出す必要がありますか? リンクのコピーリンクがクリップボードにコピーされました!
いいえ。Red Hat Single Sign-On サーバーにより発行された通常のアクセストークンと同様に、RPTS はデフォルトの形式として JSON Web トークン (JWT) 仕様も使用します。
リモートイントロスペクションエンドポイントへの呼び出しなしにこれらのトークンを検証する場合は、RPT をデコードし、その妥当性についてクエリーできます。トークンをデコードしたら、トークン内のパーミッションを使用して認可決定を実施することもできます。
これは基本的に、ポリシーエンフォーサーの動作です。必ず以下を行なってください。
- RPT の署名を検証します (レルムの公開鍵に基づく)
- exp、iat、および aud の要求に基づくトークンの有効性についてクエリー