付録 A. 追加のトークン交換の例
次のセクションでは、なりすましと委任をそれぞれ示す 2 つのトークン交換の例を示します (表示目的でのみ、余分な改行とインデントが含まれています)。
A.1. なりすましトークン交換の例
A.1.1. トークン交換リクエスト
次のトークン交換リクエストでは、クライアントはなりすましセマンティクスを持つトークンをリクエストしています (subject_token のみで actor_token がない場合、委任は不可能です)。クライアントは認可サーバーに対し、論理名 urn:example:cooperation-context を持つターゲットサービスで使用するためのトークンが必要であることを伝えます。
POST /as/token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&audience=urn%3Aexample%3Acooperation-context
&subject_token=eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc
zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI
uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTA2MDAsIm5iZiI6MTQ0MTkwOTAwMCwic
3ViIjoiYmRjQGV4YW1wbGUubmV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN
0b3J5In0.PRBg-jXn4cJuj1gmYXFiGkZzRuzbXZ_sDxdE98ddW44ufsbWLKd3JJ1VZ
hF64pbTtfjy4VXFVBDaQpKjn5JzAw
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
図 10: トークン交換リクエスト
A.1.2. Subject Token クレーム
前のリクエストの subject_token は JWT であり、デコードされた JWT クレームセットがここに表示されます。JWT は、特定の時間枠内に認可サーバーによって消費されることを意図しています。JWT のサブジェクト ([email protected]) は、その代理として新しいトークンがリクエストされている当事者です。
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910600,
"nbf":1441909000,
"sub":"[email protected]",
"scope":"orders profile history"
}
図 11: Subject Token クレーム
A.1.3. トークン交換レスポンス
以下に示すトークン交換レスポンスの access_token パラメータには、クライアントがリクエストした新しいトークンが含まれています。レスポンスの他のパラメータは、トークンが 1 時間で期限切れになるベアラアクセストークンであることを示しています。
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store
{
"access_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4
6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l
eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic3ViIjoiYmRjQGV4YW1wbGUub
mV0Iiwic2NvcGUiOiJvcmRlcnMgcHJvZmlsZSBoaXN0b3J5In0.rMdWpSGNACTvnF
uOL74sYZ6MVuld2Z2WkGLmQeR9ztj6w2OXraQlkJmGjyiCq24kcB7AI2VqVxl3wSW
nVKh85A",
"issued_token_type":
"urn:ietf:params:oauth:token-type:access_token",
"token_type":"Bearer",
"expires_in":3600
}
図 12: トークン交換レスポンス
A.1.4. 発行されたトークンクレーム
発行されたトークンのデコードされた JWT クレームセットを以下に示します。新しい JWT は認可サーバーによって発行され、論理名 urn:example:cooperation-context で知られるシステムエンティティによって、その有効期限が切れる前であればいつでも消費されることを意図しています。JWT のサブジェクト ("sub") は、リクエストを行うために使用されたトークンのサブジェクトと同じであり、これにより、クライアントはトークンを使用することで、論理名 urn:example:cooperation-context で知られるシステムエンティティでそのサブジェクトになりすますことができます。
{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"sub":"[email protected]",
"scope":"orders profile history"
}
図 13: 発行されたトークンクレーム
A.2. 委任トークン交換の例
A.2.1. トークン交換リクエスト
次のトークン交換リクエストでは、クライアントはトークンをリクエストし、subject_token と actor_token の両方を提供しています。クライアントは認可サーバーに対し、論理名 urn:example:cooperation-context を持つターゲットサービスで使用するためのトークンが必要であることを伝えます。認可サーバーのポリシーでは、発行されるトークンは複合トークンである必要があると規定されています。
POST /as/token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange
&audience=urn%3Aexample%3Acooperation-context
&subject_token=eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwc
zovL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXI
uZXhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInNjb3BlIjoic3RhdHVzIGZlZ
WQiLCJzdWIiOiJ1c2VyQGV4YW1wbGUubmV0IiwibWF5X2FjdCI6eyJzdWIiOiJhZG1
pbkBleGFtcGxlLm5ldCJ9fQ.4rPRSWihQbpMIgAmAoqaJojAxj-p2X8_fAtAGTXrvM
xU-eEZHnXqY0_AOZgLdxw5DyLzua8H_I10MCcckF-Q_g
&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
&actor_token=eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.eyJhdWQiOiJodHRwczo
vL2FzLmV4YW1wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9vcmlnaW5hbC1pc3N1ZXIuZ
XhhbXBsZS5uZXQiLCJleHAiOjE0NDE5MTAwNjAsInN1YiI6ImFkbWluQGV4YW1wbGU
ubmV0In0.7YQ-3zPfhUvzje5oqw8COCvN5uP6NsKik9CVV6cAOf4QKgM-tKfiOwcgZ
oUuDL2tEs6tqPlcBlMjiSzEjm3yBg
&actor_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt
図 14: トークン交換リクエスト
A.2.2. Subject Token クレーム
前のリクエストの subject_token は JWT であり、デコードされた JWT クレームセットがここに表示されます。JWT は、特定の有効期限前に認可サーバーによって消費されることを意図しています。JWT のサブジェクト ([email protected]) は、その代理として新しいトークンがリクエストされている当事者です。
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"scope":"status feed",
"sub":"[email protected]",
"may_act":
{
"sub":"[email protected]"
}
}
図 15: Subject Token クレーム
A.2.3. Actor Token クレーム
前のリクエストの actor_token は JWT であり、デコードされた JWT クレームセットがここに表示されます。この JWT も、特定の有効期限前に認可サーバーによって消費されることを意図しています。JWT のサブジェクト ([email protected]) は、リクエストされているセキュリティトークンを行使するアクターです。
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"sub":"[email protected]"
}
図 16: Actor Token クレーム
A.2.4. トークン交換レスポンス
以下に示すトークン交換レスポンスの access_token パラメータには、クライアントがリクエストした新しいトークンが含まれています。レスポンスの他のパラメータは、トークンが 1 時間で期限切れになる JWT であること、および発行されたトークンがアクセストークンではないためアクセストークンタイプが適用されないことを示しています。
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-cache, no-store
{
"access_token":"eyJhbGciOiJFUzI1NiIsImtpZCI6IjcyIn0.eyJhdWQiOiJ1cm4
6ZXhhbXBsZTpjb29wZXJhdGlvbi1jb250ZXh0IiwiaXNzIjoiaHR0cHM6Ly9hcy5l
eGFtcGxlLmNvbSIsImV4cCI6MTQ0MTkxMzYxMCwic2NvcGUiOiJzdGF0dXMgZmVlZ
CIsInN1YiI6InVzZXJAZXhhbXBsZS5uZXQiLCJhY3QiOnsic3ViIjoiYWRtaW5AZX
hhbXBsZS5uZXQifX0.3paKl9UySKYB5ng6_cUtQ2qlO8Rc_y7Mea7IwEXTcYbNdwG
9-G1EKCFe5fW3H0hwX-MSZ49Wpcb1SiAZaOQBtw",
"issued_token_type":"urn:ietf:params:oauth:token-type:jwt",
"token_type":"N_A",
"expires_in":3600
}
図 17: トークン交換レスポンス
A.2.5. 発行されたトークンクレーム
発行されたトークンのデコードされた JWT クレームセットを以下に示します。新しい JWT は認可サーバーによって発行され、論理名 urn:example:cooperation-context で知られるシステムエンティティによって、その有効期限が切れる前であればいつでも消費されることを意図しています。JWT のサブジェクト ("sub") は、リクエストを行うために使用された subject_token のサブジェクトと同じです。JWT のアクター ("act") は、リクエストを行うために使用された actor_token のサブジェクトと同じです。これは委任を示し、[email protected] を [email protected] に代わって行動する権限を委任された現在のアクターとして識別します。
{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"scope":"status feed",
"sub":"[email protected]",
"act":
{
"sub":"[email protected]"
}
}
図 18: 発行されたトークンクレーム