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


注記

トークンの交換は テクノロジープレビュー であるため、完全にサポートされていません。この機能はデフォルトでは無効になっています。

-Dkeycloak.profile=preview または -Dkeycloak.profile.feature.token_exchange=enabled でサーバーの起動を有効にするには、以下を行います、詳細は、Profiles を参照してください。

注記

トークン交換を使用するには、token_exchange 機能も有効にする必要があります。Profiles を参照してください。

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

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

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

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

/auth/realms/{realm}/protocol/openid-connect/token

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

7.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 スコープのターゲットセットを表します。現時点では実装されていませんが、Red Hat Single Sign-On がスコープ全般をより適切にサポートするようになると実装されます。
注記

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

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

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

{
   "access_token" : ".....",
   "refresh_token" : ".....",
   "expires_in" : "...."
 }

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

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

{
   "error" : "...."
   "error_description" : "...."
}

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

注記

トークンの交換の設定には、きめ細かな管理パーミッションに関する知識が必要です (詳細は、Server Administration Guide を参照)。交換にクライアントパーミッションを付与する必要があります。これについては、この章で後ほど説明します。

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.