6. Public Key Confirmation (Conferma della Chiave Pubblica)
6. Public Key Confirmation (Conferma della Chiave Pubblica)
I server di risorse DEVONO essere in grado di identificare in modo affidabile se un token di accesso è un token vincolato a DPoP e, in tal caso, determinare informazioni sufficienti per verificarne il vincolo alla prova DPoP (vedere Sezione 7.1). Questo vincolo viene realizzato associando la chiave pubblica al token in modo tale che la risorsa protetta possa accedervi; ad esempio, incorporando direttamente l'hash JWK nel token di accesso emesso utilizzando la sintassi descritta nella Sezione 6.1, o tramite introspezione del token come descritto nella Sezione 6.2. Altri metodi per associare una chiave pubblica a un token di accesso sono possibili previo accordo tra il server di autorizzazione e la risorsa protetta, ma sono fuori dallo scopo di questa specifica.
I server di risorse che supportano DPoP DEVONO assicurarsi che la chiave pubblica della prova DPoP corrisponda alla chiave pubblica a cui è vincolato il token di accesso.
6.1. Metodo di Conferma tramite Impronta JWK
Quando i token di accesso sono rappresentati come JWT [RFC7519], le informazioni sulla chiave pubblica sono rappresentate utilizzando il membro del metodo di conferma jkt qui definito. Per trasmettere l'hash di una chiave pubblica all'interno di un JWT, questa specifica introduce il seguente membro del Metodo di Conferma JWT [RFC7800] da utilizzare sotto il claim cnf:
jkt: Metodo di conferma dell'impronta JWK SHA-256 (JWK SHA-256 Thumbprint). Il valore del membro jkt DEVE essere la codifica base64url (come definita in [RFC7515]) dell'impronta JWK SHA-256 (secondo [RFC7638]) della chiave pubblica DPoP (in formato JWK) a cui è vincolato il token di accesso.
Il seguente JWT di esempio nella Figura 8 (con payload JWT decodificato nella Figura 9) contiene un claim cnf con il membro del metodo di conferma dell'impronta JWK jkt. Il valore jkt in questi esempi è l'hash della chiave pubblica della prova DPoP presentata negli esempi nella Sezione 5. L'esempio utilizza "\" per il ritorno a capo, secondo [RFC8792].
eyJhbGciOiJFUzI1NiIsImtpZCI6IkJlQUxrYiJ9.eyJzdWIiOiJzb21lb25lQGV4YW1\
wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJuYmYiOjE\
1NjIyNjI2MTEsImV4cCI6MTU2MjI2NjIxNiwiY25mIjp7ImprdCI6IjBaY09DT1JaTll\
5LURXcHFxMzBqWnlKR0hUTjBkMkhnbEJWM3VpZ3VBNEkifX0.3Tyo8VTcn6u_PboUmAO\
YUY1kfAavomW_YwYMkmRNizLJoQzWy2fCo79Zi5yObpIzjWb5xW4OGld7ESZrh0fsrA
Figura 8: JWT con Conferma dell'Impronta JWK SHA-256
{
"sub":"[email protected]",
"iss":"https://server.example.com",
"nbf":1562262611,
"exp":1562266216,
"cnf":
{
"jkt":"0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
}
}
Figura 9: Insieme di Claim JWT con Conferma dell'Impronta JWK SHA-256
6.2. Metodo di Conferma tramite Impronta JWK nell'Introspezione del Token
"OAuth 2.0 Token Introspection" [RFC7662] definisce un metodo per una risorsa protetta per interrogare un server di autorizzazione sullo stato attivo di un token di accesso e determinare meta-informazioni sul token.
Per un token di accesso vincolato a DPoP, l'hash della chiave pubblica a cui è vincolato il token viene trasmesso alla risorsa protetta come meta-informazione in una risposta di introspezione del token. L'hash viene trasmesso utilizzando la stessa struttura del membro jkt all'interno di un contenuto cnf descritto per il Metodo di Conferma tramite Impronta JWK nella Sezione 6.1 come membro di primo livello del JSON di risposta dell'introspezione. Si noti che il server di risorse non invia una prova DPoP con la richiesta di introspezione e il server di autorizzazione non convalida il vincolo DPoP del token di accesso all'endpoint di introspezione. Piuttosto, il server di risorse utilizza i dati della risposta di introspezione per convalidare il vincolo del token di accesso lui stesso localmente.
Se la risposta di introspezione include un membro token_type, il suo valore DEVE essere DPoP.
Il seguente esempio di richiesta di introspezione nella Figura 10 e la risposta corrispondente nella Figura 11 illustrano uno scambio di introspezione per l'esempio di token di accesso legato a DPoP emesso nella Figura 6.
POST /as/introspect.oauth2 HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic cnM6cnM6TWt1LTZnX2xDektJZHo0ZnNON2tZY3lhK1Rp
token=Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
Figura 10: Esempio di Richiesta di Introspezione
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"active": true,
"sub": "[email protected]",
"iss": "https://server.example.com",
"nbf": 1562262611,
"exp": 1562266216,
"cnf":
{
"jkt": "0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
}
}
Figura 11: Esempio di Risposta di Introspezione per un Token di Accesso Legato a DPoP