Aller au contenu principal

10. Authorization Code Binding to a DPoP Key

10. Authorization Code Binding to a DPoP Key

Lier le code d'autorisation émis à un client à sa clé de preuve de possession permet une liaison de bout en bout de l'ensemble du flux d'autorisation. Cette spécification définit le paramètre de demande d'autorisation dpop_jkt à cette fin. La valeur du paramètre de demande d'autorisation dpop_jkt est l'empreinte JWK [RFC7638] de la clé publique de preuve de possession utilisant la fonction de hachage SHA-256, qui est la même valeur que celle utilisée pour la méthode de confirmation jkt définie à la section 6.1.

À la réception d'une demande de jeton, le serveur d'autorisation calcule l'empreinte JWK de la clé publique de preuve de possession dans la preuve DPoP et vérifie qu'elle correspond à la valeur du paramètre dpop_jkt dans la demande d'autorisation. Si ce n'est pas le cas, le serveur d'autorisation DOIT rejeter la demande.

Un exemple de demande d'autorisation utilisant le paramètre de demande d'autorisation dpop_jkt est illustré ci-dessous. L'exemple utilise "\" pour le retour à la ligne, conformément à la [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

Figure 25: Demande d'autorisation avec paramètre dpop_jkt

L'utilisation du paramètre de demande d'autorisation dpop_jkt est OPTIONNELLE. Notez que le paramètre de demande d'autorisation dpop_jkt peut être utilisé en conjonction avec Proof Key for Code Exchange (PKCE) [RFC7636], qui est recommandé dans [SECURITY-TOPICS] comme contre-mesure à l'injection de code d'autorisation. Le paramètre de demande d'autorisation dpop_jkt offre une protection similaire uniquement si une clé DPoP unique est utilisée pour chaque demande d'autorisation.

10.1. DPoP avec les demandes d'autorisation poussées (PAR)

Lorsque les demandes d'autorisation poussées (PAR) [RFC9126] sont utilisées en conjonction avec DPoP, il existe deux manières de communiquer la clé DPoP dans la demande PAR :

  • Le paramètre dpop_jkt peut être utilisé, comme décrit dans la section 10, pour lier le code d'autorisation émis à une clé spécifique. Dans ce cas, dpop_jkt DOIT être inclus avec les autres paramètres de demande d'autorisation dans le corps POST de la demande PAR.
  • Alternativement, un en-tête DPoP peut être ajouté à la demande PAR. Dans ce cas, le serveur d'autorisation DOIT vérifier le JWT de preuve DPoP fourni tel que défini dans la section 4.3 et DOIT se comporter comme si l'empreinte de la clé publique contenue avait été fournie en utilisant dpop_jkt ; c'est-à-dire rejeter les demandes de jeton ultérieures à moins qu'une preuve DPoP pour la même clé ne soit fournie. Cela simplifie la mise en œuvre du client car il peut attacher « aveuglément » un en-tête DPoP à toutes les demandes adressées au serveur d'autorisation, quel que soit le type de la demande. De plus, cela fournit une liaison plus forte car l'en-tête DPoP contient une preuve de possession de la clé privée.

Les serveurs d'autorisation prenant en charge PAR et DPoP DOIVENT prendre en charge les deux mécanismes. Si les deux mécanismes sont utilisés simultanément, le serveur d'autorisation DOIT rejeter la demande si l'empreinte JWK dans dpop_jkt ne correspond pas à la clé publique dans l'en-tête DPoP.

Autoriser les deux mécanismes garantit que les clients utilisant dpop_jkt n'ont pas besoin de traiter les demandes d'autorisation poussées différemment des demandes d'autorisation via le canal frontal, tout en permettant aux clients ayant un seul chemin de code pour sécuriser tous les appels aux points de terminaison du serveur d'autorisation de ne pas avoir à distinguer les demandes vers le point de terminaison PAR des demandes vers le point de terminaison de jeton.