検索

8.5. 参加者トークンの要求

download PDF

要求者トークン (RPT) は、JSON Web 署名 (JWS) を使用してデジタル署名された JSON Web トークン (JWT) です。トークンは、Red Hat build of Keycloak が特定のクライアントに対して以前に発行した OAuth2 アクセストークンに基づき、ユーザーまたは自身の代わりに作成されます。

RPT をデコードすると、以下のようなペイロードが表示されます。

{
  "authorization": {
      "permissions": [
        {
          "resource_set_id": "d2fe9843-6462-4bfc-baba-b5787bb6e0e7",
          "resource_set_name": "Hello World Resource"
        }
      ]
  },
  "jti": "d6109a09-78fd-4998-bf89-95730dfd0892-1464906679405",
  "exp": 1464906971,
  "nbf": 0,
  "iat": 1464906671,
  "sub": "f1888f4d-5172-4359-be0c-af338505d86c",
  "typ": "kc_ett",
  "azp": "hello-world-authz-service"
}

このトークンから、サーバーから付与されたすべてのパーミッションを permissions 要求から取得できます。

また、パーミッションは、実際に付与して、これらの同じ権限を発行するために使用されたアクセス制御メソッドから保護および完全に分離しているリソース/スコープと直接関連する点にご留意ください。

8.5.1. 要求するトークンのイントロスペクション

場合によっては、リクエスト側のトークン (RPT) をイントロスペクションして、トークン内のパーミッションを確認するか、リソースサーバー側の認可決定を実施したい場合があります。

トークンイントロスペクションが役立つ主なユースケースは 2 つあります。

  • クライアントアプリケーションがトークンの有効性をクエリーして、同じまたは追加のパーミッションを持つ新しいパーミッションを取得する必要がある場合は、
  • リソースサーバーで認可の決定を強制する場合 (特に組み込みの ポリシーエンフォーサー がお使いのアプリケーションに適さない場合)

8.5.2. RPT に関する情報の取得

トークンイントロスペクションは基本的に OAuth2 トークンイントロスペクション に準拠するエンドポイントであり、そこから RPT に関する情報を取得できます。

http://${host}:${port}/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/realms/hello-world-authz/protocol/openid-connect/token/introspect"
注記

上記の要求では HTTP BASIC を使用して、クライアントのクレデンシャル (クライアント ID およびシークレット) を渡して、トークンのイントロスペクションを試みるクライアントを認証していますが、Red Hat build of Keycloak でサポートされる他のクライアント認証方法を使用できます。

イントロスペクションエンドポイントには 2 つのパラメーターが必要です。

  • token_type_hint

    このパラメーターの値として requesting_party_token を使用します。これは、RPT をイントロスペクションする必要があることを示します。

  • token

    このパラメーターの値として、認可プロセス中にサーバーが返したためトークン文字列を使用します。

その結果、サーバーの応答は以下のようになります。

{
  "permissions": [
    {
      "resource_id": "90ccc6fc-b296-4cd1-881e-089e1ee15957",
      "resource_name": "Hello World Resource"
    }
  ],
  "exp": 1465314139,
  "nbf": 0,
  "iat": 1465313839,
  "aud": "hello-world-authz-service",
  "active": true
}

RPT がアクティブでない場合は、代わりに以下の応答が返されます。

{
  "active": false
}

8.5.3. RPT をイントロスペクションするたびにサーバーを呼び出す必要がありますか?

いいえ。Red Hat build of Keycloak サーバーが発行した通常のアクセストークンと同様に、RPT はデフォルトの形式として JSON Web トークン (JWT) 仕様も使用します。

リモートイントロスペクションエンドポイントへの呼び出しなしにこれらのトークンを検証する場合は、RPT をデコードし、その妥当性についてクエリーできます。トークンをデコードしたら、トークン内のパーミッションを使用して認可決定を実施することもできます。

これは基本的に、ポリシーエンフォーサーの動作です。必ず以下を行なってください。

  • RPT の署名を検証します (レルムの公開鍵に基づく)
  • expiat、および aud の要求に基づくトークンの有効性についてクエリー
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.