6. Public Key Confirmation
6. Public Key Confirmation
Les serveurs de ressources DOIVENT être capables d'identifier de manière fiable si un jeton d'accès est un jeton lié à DPoP et, si tel est le cas, de déterminer des informations suffisantes pour vérifier sa liaison avec la preuve DPoP (voir la section 7.1). Cette liaison est réalisée en associant la clé publique au jeton de manière à ce que la ressource protégée puisse y accéder ; par exemple, en intégrant directement le hachage JWK dans le jeton d'accès émis en utilisant la syntaxe décrite dans la section 6.1, ou via l'introspection de jeton comme décrit dans la section 6.2. D'autres méthodes d'association d'une clé publique à un jeton d'accès sont possibles par accord entre le serveur d'autorisation et la ressource protégée, mais elles sortent du cadre de cette spécification.
Les serveurs de ressources prenant en charge DPoP DOIVENT s'assurer que la clé publique de la preuve DPoP correspond à la clé publique à laquelle le jeton d'accès est lié.
6.1. Méthode de confirmation par empreinte JWK
Lorsque les jetons d'accès sont représentés en tant que JWT [RFC7519], les informations de clé publique sont représentées à l'aide du membre de méthode de confirmation jkt défini ici. Pour transmettre le hachage d'une clé publique dans un JWT, cette spécification introduit le membre de méthode de confirmation JWT [RFC7800] suivant à utiliser sous la revendication cnf :
jkt : Méthode de confirmation par empreinte JWK SHA-256 (JWK SHA-256 Thumbprint). La valeur du membre jkt DOIT être l'encodage base64url (tel que défini dans la [RFC7515]) de l'empreinte JWK SHA-256 (conformément à la [RFC7638]) de la clé publique DPoP (au format JWK) à laquelle le jeton d'accès est lié.
L'exemple de JWT dans la Figure 8 (avec la charge utile JWT décodée dans la Figure 9) contient une revendication cnf avec le membre de méthode de confirmation par empreinte JWK jkt. La valeur jkt dans ces exemples est le hachage de la clé publique de la preuve DPoP présentée dans les exemples de la section 5. L'exemple utilise "\" pour le retour à la ligne, conformément à la [RFC8792].
eyJhbGciOiJFUzI1NiIsImtpZCI6IkJlQUxrYiJ9.eyJzdWIiOiJzb21lb25lQGV4YW1\
wbGUuY29tIiwiaXNzIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJuYmYiOjE\
1NjIyNjI2MTEsImV4cCI6MTU2MjI2NjIxNiwiY25mIjp7ImprdCI6IjBaY09DT1JaTll\
5LURXcHFxMzBqWnlKR0hUTjBkMkhnbEJWM3VpZ3VBNEkifX0.3Tyo8VTcn6u_PboUmAO\
YUY1kfAavomW_YwYMkmRNizLJoQzWy2fCo79Zi5yObpIzjWb5xW4OGld7ESZrh0fsrA
Figure 8: JWT avec confirmation d'empreinte JWK SHA-256
{
"sub":"[email protected]",
"iss":"https://server.example.com",
"nbf":1562262611,
"exp":1562266216,
"cnf":
{
"jkt":"0ZcOCORZNYy-DWpqq30jZyJGHTN0d2HglBV3uiguA4I"
}
}
Figure 9: Ensemble de revendications JWT avec confirmation d'empreinte JWK SHA-256
6.2. Méthode de confirmation par empreinte JWK dans l'introspection de jeton
L'« Introspection de jeton OAuth 2.0 » [RFC7662] définit une méthode permettant à une ressource protégée d'interroger un serveur d'autorisation sur le statut actif d'un jeton d'accès ainsi que de déterminer des méta-informations sur le jeton.
Pour un jeton d'accès lié à DPoP, le hachage de la clé publique à laquelle le jeton est lié est transmis à la ressource protégée sous forme de méta-information dans une réponse d'introspection de jeton. Le hachage est transmis à l'aide de la même structure de membre jkt dans un contenu cnf que celle décrite pour la méthode de confirmation par empreinte JWK dans la section 6.1 en tant que membre de haut niveau de la réponse JSON d'introspection. Notez que le serveur de ressources n'envoie pas de preuve DPoP avec la demande d'introspection et que le serveur d'autorisation ne valide pas la liaison DPoP du jeton d'accès au niveau du point de terminaison d'introspection. Le serveur de ressources utilise plutôt les données de la réponse d'introspection pour valider lui-même la liaison du jeton d'accès localement.
Si la réponse d'introspection inclut un membre token_type, sa valeur DOIT être DPoP.
L'exemple de demande d'introspection dans la Figure 10 et la réponse correspondante dans la Figure 11 illustrent un échange d'introspection pour l'exemple de jeton d'accès lié à DPoP émis dans la Figure 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
Figure 10: Exemple de demande d'introspection
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"
}
}
Figure 11: Exemple de réponse d'introspection pour un jeton d'accès lié à DPoP