12.2. 内部トークンから内部トークンへの交換


内部のトークンからトークンへの交換では、特定のクライアントに作成された既存のトークンがあり、このトークンを別のターゲットクライアントに作成された新しいトークンと交換する必要があります。これを実行する理由これは通常、クライアントが自身のために作成したトークンを持っており、アクセストークン内で異なるクレームとパーミッションを必要とする他のアプリケーションに追加の要求を行う必要がある場合に発生します。このタイプの交換が必要となるかもしれないその他の理由は、アプリが信頼性の低いアプリで呼び出す必要があり、現在のアクセストークンを伝播したくない場合の "パーミッションのダウングレード" を実行する必要がある場合です。

12.2.1. 交換のパーミッションの付与

別のクライアントのトークンを交換する必要のあるクライアントは、管理コンソールで認可される必要があります。交換するパーミッションを付与するクライアントに、token-exchange の細かいパーミッションを定義する必要があります。

図12.1 ターゲットクライアントパーミッション

ターゲットクライアントパーミッション

手順

  1. Permissions EnabledOn に切り替えます。

    図12.2 ターゲットクライアントパーミッション

    ターゲットクライアント交換のパーミッション設定

    そのページには、token-exchange のリンクが表示されます。

  2. そのリンクをクリックして、パーミッションの定義を開始します。

    このセットアップページが表示されます。

    図12.3 ターゲットクライアント交換のパーミッション設定

    ターゲットクライアント交換のパーミッション設定
  3. 画面上部のブレッドクラムで Client details をクリックします。
  4. このパーミッションのポリシーを定義します。
  5. 画面上部のブレッドクラムで Authorization をクリックします。
  6. このパーミッションのポリシーを定義します。
  7. Policies タブをクリックします。
  8. Create policy ボタンをクリックして Client を作成します。

    図12.4 クライアントポリシーの作成

    クライアントポリシーの作成
  9. トークン交換を要求する認証されたクライアントである、開始クライアントを入力します。
  10. このポリシーを作成したら、ターゲットクライアントの token-exchange パーミッションに戻り、定義したクライアントポリシーを追加します。

    図12.5 クライアントポリシーの適用

    クライアントポリシーの適用

これでクライアントを呼び出すパーミッションがある。これを正しく行わないと、エクスチェンジを作成しようとすると、403 Forbidden 応答が返されます。

12.2.2. リクエストの作成

クライアントが、既存のトークンを他のクライアントをターゲットにしたトークンと交換する場合は、audience パラメーターを使用します。このパラメーターは、管理コンソールで設定したターゲットクライアントのクライアント識別子である必要があります。

curl -X POST \
    -d "client_id=starting-client" \
    -d "client_secret=the client secret" \
    --data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
    -d "subject_token=...." \
    --data-urlencode "requested_token_type=urn:ietf:params:oauth:token-type:refresh_token" \
    -d "audience=target-client" \
    http://localhost:8080/realms/myrealm/protocol/openid-connect/token

subject_token パラメーターは、ターゲットレルムのアクセストークンである必要があります。requested_token_type パラメーターがリフレッシュトークンタイプである場合、応答にはアクセストークン、リフレッシュトークン、および有効期限が含まれます。以下は、この呼び出しから返される JSON 応答の例です。

audience パラメーターが設定されていない場合に、パラメーターの値はデフォルトでトークン交換要求を行うクライアントに設定されます。

機密クライアントとは異なり、パブリッククライアントは他のクライアントからのトークンを使用してトークン交換を実行することはできません。subject_token を指定する場合には、トークンを発行した (機密の) クライアントと、リクエストを行ったクライアントが同じである必要があります。別のクライアントに対して発行された場合には、リクエストを行ったクライアントは、トークンに設定されたオーディエンスに含まれている必要があります。

ターゲットの audience (要求を行うクライアントとは別のクライアント) を明示的に設定する場合に、token-exchange のスコープのパーミッションを audience パラメーターに指定されたクライアントに設定して、クライアントが要求を出して交換が正常に完了するようにしてください。

{
   "access_token" : "....",
   "refresh_token" : "....",
   "expires_in" : 3600
}
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る