12.4. 外部トークンから内部トークンへの交換
内部トークンの外部 ID プロバイダーが作成した外部トークンを信頼し、交換できます。これはレルム間をブリッジしたり、ソーシャルプロバイダーからのトークンを信頼したりするために使用できます。新しいユーザーが存在しない場合はレルムにインポートされるという点で、ID プロバイダーのブラウザーログインと同様に機能します。
外部トークン交換に関する現在の制限として、外部トークンが既存のユーザーにマップされている場合、既存のユーザーが外部 ID プロバイダーへのアカウントリンクをすでに持っていない限り、交換が許可されない点があります。
交換が完了すると、レルム内にユーザーセッションが作成され、requested_token_type パラメーターの値に応じてアクセストークンおよび更新トークンが送信されます。この新しいユーザーセッションは、タイムアウトするまで、またはこの新しいアクセストークンを渡すレルムのログアウトエンドポイントを呼び出すまで、アクティブなままである点に注意してください。
これらのタイプの変更には、管理コンソールで設定済みのアイデンティティープロバイダーが必要でした。
SAML アイデンティティープロバイダーは現時点ではサポートされていません。Twitter トークンも交換できません。
12.4.1. 交換のパーミッションの付与 リンクのコピーリンクがクリップボードにコピーされました!
外部トークン交換を行う前に、呼び出し元のクライアントに交換を行うためのパーミッションを与えます。このパーミッションは、内部から外部へのパーミッションが付与される 方法と同じ方法で付与されます。
呼び出し以外のクライアントを参照する値を持つ audience パラメーターを指定する場合、audience パラメーターに固有のターゲットクライアントに交換するための呼び出しクライアントのパーミッションも付与する必要があります。これを行う方法は、このセクションで すでに説明 されています。
12.4.2. リクエストの作成 リンクのコピーリンクがクリップボードにコピーされました!
subject_token_type は、urn:ietf:params:oauth:token-type:access_token または urn:ietf:params:oauth:token-type:jwt のいずれかである必要があります。タイプが urn:ietf:params:oauth:token-type:access_token の場合は、subject_issuer パラメーターを指定する必要があります。これは設定された ID プロバイダーのエイリアスです。タイプが urn:ietf:params:oauth:token-type:jwt の場合、プロバイダーは、プロバイダーのエイリアスである JWT 内の iss (issuer) 要求を介して照合されます。これはプロバイダーのエイリアスであるか、プロバイダー設定内の登録済み issuer である必要があります。
検証のために、トークンがアクセストークンである場合、プロバイダーのユーザー情報サービスが呼び出されてトークンが検証されます。呼び出しに成功すると、アクセストークンが有効であることを意味します。サブジェクトトークンが JWT であり、プロバイダーで署名検証が有効になっている場合は、それが試行されます。それ以外の場合は、デフォルトでユーザー情報サービスも呼び出してトークンを検証します。
デフォルトでは、作成された内部トークンは、呼び出し元のクライアントを使用して、呼び出し元のクライアント用に定義されたプロトコルマッパーを使用してトークンの内容を判別します。または、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=...." \
-d "subject_issuer=myOidcProvider" \
--data-urlencode "subject_token_type=urn:ietf:params:oauth:token-type:access_token" \
-d "audience=target-client" \
http://localhost:8080/realms/myrealm/protocol/openid-connect/token
requested_token_type パラメーターがリフレッシュトークンタイプである場合、応答にはアクセストークン、リフレッシュトークン、および有効期限が含まれます。以下は、この呼び出しから返される JSON 応答の例です。
{
"access_token" : "....",
"refresh_token" : "....",
"expires_in" : 3600
}