第12章 トークン交換の使用


注記

トークン交換は プレビュー であり、完全にはサポートされていません。この機能はデフォルトで無効化されています。

有効にするには、--features=preview または --features=token-exchange でサーバーを起動します。

トークンの交換は テクノロジープレビュー であるため、完全にサポートされていません。

注記

内部トークンから内部トークンへの交換 フロー以上のものを使用するには、admin-fine-grained-authz 機能も有効にします。詳細は、機能の有効化と無効化 の章を参照してください。

12.1. トークン交換の仕組み

Red Hat build of Keycloak では、トークン交換とは、一連の認証情報またはトークンを使用してまったく異なるトークンを取得するプロセスのことです。クライアントは、信頼性の低いアプリケーションで呼び出したい場合があるため、現在のトークンをダウングレードしたい場合があります。クライアントは、Red Hat build of Keycloak トークンを、リンクされたソーシャルプロバイダーアカウント用に保存されているトークンと交換することを推奨します。他の Red Hat build of Keycloak レルムまたは外部 IDP によって生成された外部トークンを信頼することを推奨します。クライアントでは、ユーザーの権限を借用しなければならない場合があります。以下は、トークン交換に関する Red Hat build of Keycloak の現行機能に関する概要です。

  • クライアントは、特定のクライアント用に作成された既存の Red Hat build of Keycloak トークンを、別のクライアントを対象とした新しいトークンと交換できます。
  • クライアントは、既存の Red Hat build of Keycloak トークンを外部トークン (リンクされた Facebook アカウントなど) と交換できます。
  • クライアントが外部トークンを Red Hat build of Keycloak トークンと交換できる。
  • クライアントはユーザーの権限を借用できます。

Red Hat build of Keycloak におけるトークン交換は、IETF の OAuth トークン交換 仕様の非常に緩い実装です。この仕様を少し拡張し、一部を無視して、他の部分は大まかに解釈しました。これは、レルムの OpenID Connect トークンエンドポイントにおける単純な付与タイプ呼び出しです。

/realms/{realm}/protocol/openid-connect/token
Copy to Clipboard Toggle word wrap

これは、フォームパラメーター (application/x-www-form-urlencoded) を入力として受け付け、出力は交換を要求したトークンのタイプによって異なります。トークン交換はクライアントエンドポイントであるため、リクエストは呼び出し元のクライアントに対して認証情報を提供する必要があります。パブリッククライアントは、クライアント識別子を form パラメーターとして指定します。機密クライアントは、フォームパラメーターを使用して、クライアント ID とシークレット、Basic 認証、または管理者がレルムで設定したクライアント認証フローを渡すこともできます。

12.1.1. フォームパラメーター

client_id
必須の可能性あり。このパラメーターは、認証にフォームパラメーターを使用するクライアントに必要です。Basic 認証、クライアント JWT トークン、またはクライアント証明書認証を使用している場合は、このパラメーターを指定しないでください。
client_secret
必須の可能性あり。このパラメーターは、認証にフォームパラメーターを使用し、認証情報としてクライアントシークレットを使用するクライアントに必要です。レルムのクライアント呼び出しが別の手段で認証されている場合は、このパラメーターは指定しないでください。
grant_type
必須。パラメーターの値は urn:ietf:params:oauth:grant-type:token-exchange にする必要があります。
subject_token
任意。リクエストが行われている当事者の ID を表すセキュリティートークン。これは、既存のトークンを新しいトークンと交換する場合に必要です。
subject_issuer
任意。subject_token の発行者を特定します。トークンが現在のレルムから送信される場合や、発行者が subject_token_type から判断できる場合は空白のままにすることができます。それ以外の場合は指定する必要があります。有効な値は、レルムに設定された ID プロバイダー のエイリアスです。または、特定の ID プロバイダー によって設定された発行者要求 ID です。
subject_token_type
任意。このパラメーターは、subject_token パラメーターで渡されるトークンのタイプです。subject_token がレルムから取得され、アクセストークンである場合、デフォルトは urn:ietf:params:oauth:token-type:access_token に設定されます。外部トークンの場合には、subject_issuer の要件に応じてこのパラメーターを指定する必要がある場合とそうでない場合があります。
requested_token_type
任意。このパラメーターは、クライアントが交換するトークンのタイプを表します。現在、oauth および OpenID Connect トークンタイプのみがサポートされます。このデフォルト値は urn:ietf:params:oauth:token-type:refresh_token であるかどうかによって異なります。この場合、応答内でアクセストークンとリフレッシュトークンの両方が返されます。その他の適切な値は、urn:ietf:params:oauth:token-type:access_token および urn:ietf:params:oauth:token-type:id_token です。
audience
任意。このパラメーターは、新しいトークンを作成するターゲットクライアントを指定します。
requested_issuer
任意。このパラメーターは、クライアントが外部プロバイダーによって作成されたトークンを必要とすることを指定します。レルム内で設定された ID プロバイダー のエイリアスである必要があります。
requested_subject
任意。これは、クライアントが別のユーザーになりすます場合のユーザー名またはユーザー ID を指定します。
scope
任意。このパラメーターは、クライアントが要求する OAuth および OpenID Connect スコープのターゲットセットを表します。返されるスコープは、スコープパラメーターとアクセストークンスコープのカルテジアン積です。
注記

現在、OpenID Connect および OAuth の交換のみをサポートします。SAML ベースのクライアントおよびアイデンティティープロバイダーのサポートは、ユーザーの需要に応じて今後追加される可能性があります。

12.1.2. トークン交換要求からの応答

交換呼び出しからの正常な応答は、クライアントが要求する requested-token-typerequested_issuer に依存するコンテンツタイプを含む HTTP 200 応答コードを返します。OAuth が要求するトークンタイプは、OAuth Token Exchange 仕様で説明されているように、JSON ドキュメントを返します。

{
   "access_token" : ".....",
   "refresh_token" : ".....",
   "expires_in" : "...."
 }
Copy to Clipboard Toggle word wrap

リフレッシュトークンを要求するクライアントは、応答でアクセストークンとリフレッシュトークンの両方を返します。アクセストークンタイプのみを要求するクライアントは、応答でアクセストークンのみを取得します。requested_issuer パラメーターを介して外部発行者を要求するクライアントの有効期限情報は、含まれる場合とそうでない場合があります。

通常、エラー応答は 400 HTTP 応答コードカテゴリーに分類されますが、エラーの重大度に応じて他のエラーステータスコードが返される場合があります。エラー応答には、requested_issuer に依存するコンテンツが含まれる場合があります。OAuth ベースの交換では、以下のように JSON ドキュメントが返される場合があります。

{
   "error" : "...."
   "error_description" : "...."
}
Copy to Clipboard Toggle word wrap

交換タイプに応じて、追加のエラークレームを返すことができます。たとえば、ユーザーに ID プロバイダーへのリンクがない場合に、OAuth ID プロバイダーには追加の account-link-url 要求が含まれる場合があります。このリンクは、クライアントが開始したリンク要求に使用できます。

注記

トークンの交換のセットアップには、きめ細かな管理パーミッションに関する知識が必要です (詳細は、サーバー管理ガイド を参照)。交換にクライアントパーミッションを付与する必要があります。これは、この章で後ほど説明します。

この章の残りの部分では、セットアップ要件を説明し、さまざまな交換シナリオの例を示します。分かりやすくするために、現在のレルムで作成された最小のトークンを 内部 トークンとして呼び出し、外部レルムまたは ID プロバイダーによって作成されたトークンを 外部 トークンと呼ぶことにします。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat