Passa al contenuto principale

10. Authorization Code Binding to a DPoP Key (Vincolo del Codice di Autorizzazione a una Chiave DPoP)

10. Authorization Code Binding to a DPoP Key (Vincolo del Codice di Autorizzazione a una Chiave DPoP)

Vincolare il codice di autorizzazione emesso a un client alla sua chiave di prova di possesso consente un vincolo end-to-end dell'intero flusso di autorizzazione. Questa specifica definisce il parametro di richiesta di autorizzazione dpop_jkt a questo scopo. Il valore del parametro di richiesta di autorizzazione dpop_jkt è l'impronta JWK SHA-256 [RFC7638] della chiave pubblica di prova di possesso, che è lo stesso valore utilizzato per il metodo di conferma jkt definito nella Sezione 6.1.

Alla ricezione di una richiesta di token, il server di autorizzazione calcola l'impronta JWK della chiave pubblica di prova di possesso nella prova DPoP e controlla se corrisponde al valore del parametro dpop_jkt nella richiesta di autorizzazione. In caso contrario, il server di autorizzazione DEVE rifiutare la richiesta.

Di seguito è mostrato un esempio di una richiesta di autorizzazione che utilizza il parametro di richiesta di autorizzazione dpop_jkt. L'esempio utilizza "\" per il ritorno a capo, secondo [RFC8792].

GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz\
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb\
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM\
&code_challenge_method=S256\
&dpop_jkt=NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs HTTP/1.1
Host: server.example.com

Figura 25: Richiesta di Autorizzazione con parametro dpop_jkt

L'uso del parametro di richiesta di autorizzazione dpop_jkt è OPZIONALE. Si noti che il parametro di richiesta di autorizzazione dpop_jkt può essere utilizzato insieme a Proof Key for Code Exchange (PKCE) [RFC7636], che è raccomandato in [SECURITY-TOPICS] come contromisura all'iniezione di codice di autorizzazione. Il parametro di richiesta di autorizzazione dpop_jkt fornisce una protezione simile solo se viene utilizzata una chiave DPoP unica per ciascuna richiesta di autorizzazione.

10.1. DPoP con Pushed Authorization Requests

Quando Pushed Authorization Requests (PAR) [RFC9126] viene utilizzato insieme a DPoP, ci sono due modi per comunicare la chiave DPoP nella richiesta PAR:

  • Il parametro dpop_jkt può essere utilizzato, come descritto nella Sezione 10, per vincolare il codice di autorizzazione emesso a una chiave specifica. In questo caso, dpop_jkt DEVE essere incluso con gli altri parametri di richiesta di autorizzazione nel corpo POST della richiesta PAR.
  • In alternativa, è possibile aggiungere un'intestazione DPoP alla richiesta PAR. In questo caso, il server di autorizzazione DEVE verificare il JWT di prova DPoP fornito come definito nella Sezione 4.3 e DEVE comportarsi come se l'impronta della chiave pubblica contenuta fosse stata fornita utilizzando dpop_jkt; ovvero, rifiutare le richieste di token successive a meno che non venga fornita una prova DPoP per la stessa chiave. Ciò semplifica l'implementazione del client poiché può allegare "ciecamente" un'intestazione DPoP a tutte le richieste al server di autorizzazione, indipendentemente dal tipo di richiesta. Inoltre, ciò fornisce un vincolo più forte poiché l'intestazione DPoP contiene una prova di possesso della chiave privata.

I server di autorizzazione che supportano PAR e DPoP DEVONO supportare entrambi i meccanismi. Se entrambi i meccanismi vengono utilizzati contemporaneamente, il server di autorizzazione DEVE rifiutare la richiesta se l'impronta JWK in dpop_jkt non corrisponde alla chiave pubblica nell'intestazione DPoP.

Consentire entrambi i meccanismi garantisce che i client che utilizzano dpop_jkt non debbano trattare le richieste di autorizzazione spinte (pushed) in modo diverso dalle richieste di autorizzazione tramite il canale frontale, consentendo al contempo ai client con un unico percorso di codice per proteggere tutte le chiamate agli endpoint del server di autorizzazione di non dover distinguere le richieste all'endpoint PAR dalle richieste all'endpoint del token.