Passa al contenuto principale

Appendice A. Esempi Aggiuntivi di Scambio di Token

Nelle sezioni seguenti sono forniti due esempi di scambio di token che illustrano rispettivamente l'impersonificazione e la delega (con interruzioni di riga e rientri aggiuntivi solo a scopo di visualizzazione).

A.1. Esempio di Scambio di Token per Impersonificazione

A.1.1. Richiesta di Scambio di Token

Nella seguente richiesta di scambio di token, un client sta richiedendo un token con semantica di impersonificazione (la delega è impossibile con solo un subject_token e nessun actor_token). Il client dice al server di autorizzazione che ha bisogno di un token per l'uso presso il servizio di destinazione con il nome logico 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

Figura 10: Richiesta di Scambio di Token

A.1.2. Claim del Subject Token

Il subject_token nella richiesta precedente è un JWT e il set di claim JWT decodificato è mostrato qui. Il JWT è destinato al consumo da parte del server di autorizzazione entro una specifica finestra temporale. Il soggetto del JWT ([email protected]) è la parte per conto della quale viene richiesto il nuovo token.

{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910600,
"nbf":1441909000,
"sub":"[email protected]",
"scope":"orders profile history"
}

Figura 11: Claim del Subject Token

A.1.3. Risposta di Scambio di Token

Il parametro access_token della risposta di scambio di token mostrata di seguito contiene il nuovo token richiesto dal client. Gli altri parametri della risposta indicano che il token è un token di accesso bearer che scade in un'ora.

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
}

Figura 12: Risposta di Scambio di Token

A.1.4. Claim del Token Emesso

Il set di claim JWT decodificato del token emesso è mostrato di seguito. Il nuovo JWT è emesso dal server di autorizzazione e destinato al consumo da parte di un'entità di sistema nota con il nome logico urn:example:cooperation-context in qualsiasi momento prima della sua scadenza. Il soggetto ("sub") del JWT è lo stesso del soggetto del token utilizzato per effettuare la richiesta, il che consente effettivamente al client di impersonare tale soggetto presso l'entità di sistema nota con il nome logico di urn:example:cooperation-context utilizzando il token.

{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"sub":"[email protected]",
"scope":"orders profile history"
}

Figura 13: Claim del Token Emesso

A.2. Esempio di Scambio di Token per Delega

A.2.1. Richiesta di Scambio di Token

Nella seguente richiesta di scambio di token, un client sta richiedendo un token e fornendo sia un subject_token che un actor_token. Il client dice al server di autorizzazione che ha bisogno di un token per l'uso presso il servizio di destinazione con il nome logico urn:example:cooperation-context. La politica presso il server di autorizzazione impone che il token emesso sia composito.

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

Figura 14: Richiesta di Scambio di Token

A.2.2. Claim del Subject Token

Il subject_token nella richiesta precedente è un JWT e il set di claim JWT decodificato è mostrato qui. Il JWT è destinato al consumo da parte del server di autorizzazione prima di un orario di scadenza specifico. Il soggetto del JWT ([email protected]) è la parte per conto della quale viene richiesto il nuovo token.

{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"scope":"status feed",
"sub":"[email protected]",
"may_act":
{
"sub":"[email protected]"
}
}

Figura 15: Claim del Subject Token

A.2.3. Claim dell'Actor Token

L'actor_token nella richiesta precedente è un JWT e il set di claim JWT decodificato è mostrato qui. Anche questo JWT è destinato al consumo da parte del server di autorizzazione prima di un orario di scadenza specifico. Il soggetto del JWT ([email protected]) è l'attore che utilizzerà il token di sicurezza richiesto.

{
"aud":"https://as.example.com",
"iss":"https://original-issuer.example.net",
"exp":1441910060,
"sub":"[email protected]"
}

Figura 16: Claim dell'Actor Token

A.2.4. Risposta di Scambio di Token

Il parametro access_token della risposta di scambio di token mostrata di seguito contiene il nuovo token richiesto dal client. Gli altri parametri della risposta indicano che il token è un JWT che scade in un'ora e che il tipo di token di accesso non è applicabile poiché il token emesso non è un token di accesso.

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
}

Figura 17: Risposta di Scambio di Token

A.2.5. Claim del Token Emesso

Il set di claim JWT decodificato del token emesso è mostrato di seguito. Il nuovo JWT è emesso dal server di autorizzazione e destinato al consumo da parte di un'entità di sistema nota con il nome logico urn:example:cooperation-context in qualsiasi momento prima della sua scadenza. Il soggetto ("sub") del JWT è lo stesso del soggetto del subject_token utilizzato per effettuare la richiesta. L'attore ("act") del JWT è lo stesso del soggetto dell'actor_token utilizzato per effettuare la richiesta. Ciò indica una delega e identifica [email protected] come l'attore corrente a cui è stata delegata l'autorità di agire per conto di [email protected].

{
"aud":"urn:example:cooperation-context",
"iss":"https://as.example.com",
"exp":1441913610,
"scope":"status feed",
"sub":"[email protected]",
"act":
{
"sub":"[email protected]"
}
}

Figura 18: Claim del Token Emesso