Anhang A. Zusätzliche Beispiele für Token-Austausch
In den folgenden Abschnitten werden zwei beispielhafte Token-Austausche bereitgestellt, die Identitätswechsel bzw. Delegierung veranschaulichen (mit zusätzlichen Zeilenumbrüchen und Einrückungen nur zu Anzeigezwecken).
A.1. Beispiel für Identitätswechsel-Token-Austausch
A.1.1. Token-Austauschanforderung
In der folgenden Token-Austauschanforderung fordert ein Client ein Token mit Identitätswechsel-Semantik an (Delegierung ist nur mit einem subject_token und keinem actor_token unmöglich). Der Client teilt dem Autorisierungsserver mit, dass er ein Token zur Verwendung beim Zieldienst mit dem logischen Namen urn:example:cooperation-context benötigt.
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
Abbildung 10: Token-Austauschanforderung
A.1.2. Subject Token Claims
Das subject_token in der vorherigen Anforderung ist ein JWT, und das dekodierte JWT Claims Set wird hier gezeigt. Das JWT ist für den Konsum durch den Autorisierungsserver innerhalb eines bestimmten Zeitfensters vorgesehen. Das Subjekt des JWT ([email protected]) ist die Partei, in deren Namen das neue Token angefordert wird.
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910600,
"nbf":1441909000,
"sub":"[email protected]",
"scope":"orders profile history"
}
Abbildung 11: Subject Token Claims
A.1.3. Token-Austauschantwort
Der Parameter access_token der unten gezeigten Token-Austauschantwort enthält das neue Token, das der Client angefordert hat. Die anderen Parameter der Antwort geben an, dass das Token ein Bearer-Zugriffstoken ist, das in einer Stunde abläuft.
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
}
Abbildung 12: Token-Austauschantwort
A.1.4. Ausgestellte Token Claims
Das dekodierte JWT Claims Set des ausgestellten Tokens wird unten gezeigt. Das neue JWT wird vom Autorisierungsserver ausgestellt und ist für den Konsum durch eine Systementität vorgesehen, die unter dem logischen Namen urn:example:cooperation-context bekannt ist, zu jeder Zeit vor seinem Ablauf. Das Subjekt ("sub") des JWT ist dasselbe wie das Subjekt des Tokens, das für die Anforderung verwendet wurde, was es dem Client effektiv ermöglicht, dieses Subjekt bei der Systementität, die unter dem logischen Namen urn:example:cooperation-context bekannt ist, durch Verwendung des Tokens zu imitieren.
{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"sub":"[email protected]",
"scope":"orders profile history"
}
Abbildung 13: Ausgestellte Token Claims
A.2. Beispiel für Delegierungs-Token-Austausch
A.2.1. Token-Austauschanforderung
In der folgenden Token-Austauschanforderung fordert ein Client ein Token an und stellt sowohl ein subject_token als auch ein actor_token bereit. Der Client teilt dem Autorisierungsserver mit, dass er ein Token zur Verwendung beim Zieldienst mit dem logischen Namen urn:example:cooperation-context benötigt. Die Richtlinie am Autorisierungsserver schreibt vor, dass das ausgestellte Token ein zusammengesetztes Token sein muss.
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
Abbildung 14: Token-Austauschanforderung
A.2.2. Subject Token Claims
Das subject_token in der vorherigen Anforderung ist ein JWT, und das dekodierte JWT Claims Set wird hier gezeigt. Das JWT ist für den Konsum durch den Autorisierungsserver vor einer bestimmten Ablaufzeit vorgesehen. Das Subjekt des JWT ([email protected]) ist die Partei, in deren Namen das neue Token angefordert wird.
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"scope":"status feed",
"sub":"[email protected]",
"may_act":
{
"sub":"[email protected]"
}
}
Abbildung 15: Subject Token Claims
A.2.3. Actor Token Claims
Das actor_token in der vorherigen Anforderung ist ein JWT, und das dekodierte JWT Claims Set wird hier gezeigt. Dieses JWT ist ebenfalls für den Konsum durch den Autorisierungsserver vor einer bestimmten Ablaufzeit vorgesehen. Das Subjekt des JWT ([email protected]) ist der Akteur, der das angeforderte Sicherheitstoken führen wird.
{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"sub":"[email protected]"
}
Abbildung 16: Actor Token Claims
A.2.4. Token-Austauschantwort
Der Parameter access_token der unten gezeigten Token-Austauschantwort enthält das neue Token, das der Client angefordert hat. Die anderen Parameter der Antwort geben an, dass das Token ein JWT ist, das in einer Stunde abläuft, und dass der Zugriffstoken-Typ nicht anwendbar ist, da das ausgestellte Token kein Zugriffstoken ist.
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
}
Abbildung 17: Token-Austauschantwort
A.2.5. Ausgestellte Token Claims
Das dekodierte JWT Claims Set des ausgestellten Tokens wird unten gezeigt. Das neue JWT wird vom Autorisierungsserver ausgestellt und ist für den Konsum durch eine Systementität vorgesehen, die unter dem logischen Namen urn:example:cooperation-context bekannt ist, zu jeder Zeit vor seinem Ablauf. Das Subjekt ("sub") des JWT ist dasselbe wie das Subjekt des subject_token, das für die Anforderung verwendet wurde. Der Akteur ("act") des JWT ist derselbe wie das Subjekt des actor_token, das für die Anforderung verwendet wurde. Dies zeigt eine Delegierung an und identifiziert [email protected] als den aktuellen Akteur, dem die Autorität übertragen wurde, im Namen von [email protected] zu handeln.
{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"scope":"status feed",
"sub":"[email protected]",
"act":
{
"sub":"[email protected]"
}
}
Abbildung 18: Ausgestellte Token Claims