- La clé publique du client (
jwk). - Le payload faisant référence à la requête de jeton d’accès, y compris la méthode (
htm) et l’URI (htu). - Une signature créée à l’aide de la clé privée du client.
- Un ID unique (
jti) pour prévenir la réutilisation. - Pour chaque requête d’API, un hachage SHA-256 (
ath) du jeton d’accès encodé en base64url. - Facultatif : pour les , une claim
noncepour s’assurer que l’application cliente a généré récemment le DPoP Proof JWT.
Cas d’utilisation courants
- Applications monopage (SPAs) et applications mobiles : En tant que clients publics, les SPAs et les applications mobiles ne disposent pas d’un environnement fiable et confidentiel, comme un serveur backend, pour stocker en toute sécurité les , ce qui les rend vulnérables au vol de jetons. DPoP atténue cette vulnérabilité de sécurité en liant les jetons d’accès à la clé publique de l’application cliente et en créant ainsi un DPoP Proof JWT. L’application cliente signe le DPoP Proof JWT avec sa clé privée et l’envoie avec une requête d’autorisation. Le Auth0 Authorization Server valide le DPoP Proof JWT et, s’il est valide, lie le jeton d’accès émis à la clé publique du client.
- Intégrations d’API tierces : Si un agent IA intégré à votre application cliente envoie une requête à une API tierce au nom de l’utilisateur à l’aide d’un DPoP Proof JWT, alors le peut valider par des moyens cryptographiques que la requête provient de l’agent IA et non d’un tiers non autorisé.
Types de grant d’application pris en charge
Fonctionnement

- Lorsqu’elle demande un jeton d’accès au serveur d’autorisation Auth0, l’application cliente génère une paire de clés cryptographiques unique et utilise la clé publique pour prouver qu’elle possède bien la clé privée.
- L’application cliente génère le DPoP Proof JWT et l’envoie au point de terminaison
/tokendu serveur d’autorisation Auth0. - Le serveur d’autorisation Auth0 vérifie le DPoP Proof JWT et, s’il est valide, émet le jeton d’accès et le lie à la clé publique du client.
- Avant d’envoyer une requête à l’API Customer, l’application cliente génère un nouveau DPoP Proof JWT pour prouver qu’elle possède la clé privée associée au jeton. L’application cliente envoie le DPoP Proof JWT ainsi que le jeton d’accès lié à l’émetteur au serveur de ressources.
- Le serveur de ressources vérifie le DPoP Proof JWT pour s’assurer que seul le propriétaire légitime du jeton, ou l’application cliente d’origine, peut l’utiliser pour accéder aux ressources protégées. Pour demander un jeton d’accès à l’aide d’un jeton d’actualisation, l’application cliente génère un nouveau DPoP Proof JWT afin de s’assurer que le jeton d’actualisation est lié à la clé publique du client.
Lier des jetons à l’émetteur à l’aide de DPoP dans Auth0

- Prérequis
- Étape 1 : L’application cliente génère une paire de clés DPoP
- Étape 2 : L’application cliente crée un DPoP Proof JWT
- Étape 3 : L’application cliente demande un jeton lié à DPoP
- Étape 4 : Le serveur d’autorisation Auth0 valide le DPoP Proof JWT
- Étape 5 : L’application cliente effectue une requête à l’API avec le jeton lié à DPoP et le DPoP Proof JWT
- Étape 6 : Gérer l’actualisation du jeton avec DPoP
Prérequis
- Configurer Sender Constraining pour votre application cliente et votre serveur de ressources.
Étape 1 : l’application cliente génère une paire de clés DPoP
Étape 2 : L’application cliente crée un DPoP Proof JWT
/token de l’Auth0 Authorization Server, votre application cliente doit créer un DPoP Proof JWT. Un DPoP Proof JWT est un JSON Web Token (JWT) signé à l’aide de la clé privée de votre client et servant de « preuve de possession ».
Le DPoP Proof JWT se compose d’un en-tête JWT et d’une charge utile contenant des claims associées à la demande de jeton :
Revendications de l’en-tête JWT
Claims du payload JWT
Une fois que l’application cliente a créé le JWT de preuve DPoP, elle le signe avec la clé privée générée à l’étape 1.
L’exemple de code suivant montre comment créer et signer un JWT de preuve DPoP dans votre application cliente :
Étape 3 : L’application cliente demande un jeton lié à DPoP
/token du serveur d’autorisation Auth0, elle inclut le JWT de preuve DPoP dans l’en-tête HTTP de la requête :
- Remplit l’en-tête HTTP DPoP avec un JWT de preuve DPoP signé.
- Envoie l’en-tête HTTP DPoP avec un JWT de preuve DPoP signé dans une requête de jeton d’accès vers le point de terminaison
/token. - Traite la réponse de l’Auth0 Authorization Server.
Clients publics
/token et n’inclut pas de valeur nonce dans l’en-tête HTTP DPoP, Auth0 renvoie un code HTTP 400 et un message d’erreur comme celui-ci :
DPoP-Nonce dans les en-têtes de la réponse. Cela correspond au flux standard « challenge-response » défini dans la spécification DPoP. Vous devez utiliser la valeur de l’en-tête DPoP-Nonce et régénérer la preuve DPoP (comme à la Step 2), inclure un claim nonce avec cette valeur, puis renvoyer la requête à l’endpoint /token.
L’exemple de code suivant montre le flux de bout en bout lorsqu’une requête /token est envoyée, puis renvoyée avec un claim nonce par un client public :
- Extrait le DPoP Proof JWT, sa clé publique et sa signature.
- Vérifie la signature à l’aide de la clé publique fournie.
- Valide les claims
htm,htu,jti,etiat. - Si tout est valide, il émet un jeton d’accès. Auth0 Authorization Server inclut une claim de confirmation,
cnf, dans le jeton d’accès. La claimcnfcontient l’empreinte (hachage) de la clé publique extraite du DPoP Proof JWT. En l’incluant dans le jeton d’accès, Auth0 Authorization Server lie le jeton d’accès à cette clé publique précise, ou le « restreint à l’émetteur ». - Définit le
token_typedans l’en-têteAuthorizationsurDPoPplutôt que surBearerdans la réponse de jeton. Traditionnellement, lorsque le jeton d’accès est transmis dans l’en-têteAuthorization, il est défini surBearer. Toutefois, comme nous transmettons un jeton d’accès lié à une clé publique à l’aide de DPoP, il est plutôt défini surDPoP. - Auth0 Authorization Server émet ensuite le jeton d’accès DPoP restreint à l’émetteur à votre application cliente.
Étape 5 : L’application cliente appelle l’API avec le jeton lié à DPoP et le DPoP Proof JWT
- Génère un nouveau DPoP Proof JWT avec les claims suivantes :
- La claim
htmcorrespond à la méthodeHTTPde la requête d’API, commeGETouPOST. - La claim
htucorrespond à l’URI de la requête d’API. - La claim
athcorrespond au hachage SHA-256 encodé en base64url du jeton d’accès lié à DPoP que vous avez reçu à l’étape 3.
- Signe de façon cryptographique le nouveau DPoP Proof JWT avec la clé privée du client.
-
Inclut le jeton d’accès lié à DPoP dans l’en-tête
Authorizationau moyen du schéma d’authentificationDPoP:
- Inclut le DPoP Proof JWT nouvellement généré dans l’en-tête HTTP
DPoP:
DPoP doit inclure une revendication ath supplémentaire. La revendication ath est un hachage SHA256 du jeton d’accès émis, encodé en base64url.
Le serveur de ressources :
- Reçoit la requête API et extrait le jeton d’accès, la preuve JWT DPoP, la clé publique et la signature.
- Vérifie la signature de la preuve JWT DPoP à l’aide de la clé publique figurant dans son en-tête
jwk. - Valide les revendications
htm,htu,jti,iatetath. - Vérifie que la clé publique indiquée dans la preuve JWT DPoP, dans son en-tête
jwk, correspond à la clé publique liée au jeton d’accès par la revendicationcnf.jktde ce jeton.
Le serveur de ressources est responsable d’implémenter la protection contre la relecture de
jti ; tous les Auth0 SDKs ne l’appliquent pas d’emblée./userinfo à l’aide d’un jeton d’accès lié à DPoP :
Étape 6 : Gérer l’actualisation du jeton avec DPoP
- Envoie une requête de jeton d’actualisation au point de terminaison
/tokende l’Auth0 Authorization Server. - Génère un DPoP Proof JWT pour la requête de jeton d’actualisation (comme à l’étape 2, avec
htmdéfini àPOSTethtudéfini comme l’URI du ). - Inclut le DPoP Proof JWT dans l’en-tête HTTP
DPoP.
- Valide le DPoP Proof JWT (comme à l’étape 4) et émet un nouveau jeton d’accès lié à DPoP.
Considérations importantes
- Sécurité de la clé privée : La sécurité de votre mise en œuvre de DPoP dépend de celle de la clé privée de votre client; vous devez donc la protéger contre tout accès non autorisé. Les clés privées doivent être générées et stockées dans un support matériel sécurisé, puis marquées comme non exportables.
- Protection contre les attaques par rejeu (
jti** etdpop-nonce) :** La claimjtidans le DPoP Proof JWT aide à prévenir les attaques par rejeu visant les ressources protégées, comme le point de terminaison/userinfo. Le serveur d’autorisation Auth0 émet un en-tête HTTPDPoP-Noncedans sa réponse, que les clients publics doivent inclure sous forme de claimnoncedans les DPoP Proof JWT subséquents pour renforcer la protection contre les attaques par rejeu. - Limites de débit : Comme le flux défi-réponse DPoP peut parfois nécessiter une requête initiale suivie d’une nouvelle tentative avec le nonce fourni par le serveur, chaque échange compte en pratique comme deux requêtes dans les limites de débit de votre tenant Auth0. Assurez-vous que le volume de requêtes de votre application tient compte de cette surcharge.
- Gestion des erreurs : Vous êtes responsable de mettre en œuvre la logique nécessaire pour gérer les erreurs propres à DPoP provenant du serveur d’autorisation Auth0 ou du serveur de ressources, comme
invalid_dpop_proofouuse_dpop_nonce. - Types de clients : Utilisez DPoP pour les clients publics, comme les Single Page Applications (SPA) ou les applications mobiles qui ne peuvent pas stocker un client secret de façon sécuritaire. Pour les , comme les services backend avec des client secrets, DPoP ajoute une couche de sécurité, mais ces clients disposent déjà d’autres mécanismes de liaison à l’expéditeur.
- Performance : Comme la génération et la signature de DPoP Proof JWT pour chaque appel d’API ajoutent une légère surcharge, assurez-vous que les opérations cryptographiques de votre application cliente sont efficaces.
- Rotation des clés : Mettez en œuvre une stratégie de rotation de vos paires de clés DPoP pour renforcer la sécurité. Assurez-vous d’utiliser la même paire de clés pendant une même session.
- Persistance : Pour les applications clientes qui doivent maintenir une session et réutiliser des access tokens liés à DPoP, comme les SPA de longue durée, enregistrez et récupérez de façon sécuritaire la paire de clés originale entre les rechargements de l’application. Si une nouvelle paire de clés est générée ou si une autre paire de clés est utilisée, l’access token lié à DPoP devient invalide, puisqu’il est lié cryptographiquement à la clé publique de la paire d’origine. Vous pouvez enregistrer la paire de clés, par exemple, dans l’
IndexedDBd’un navigateur ou dans le stockage sécurisé d’une application mobile.