Accueil > OpenID Connect OAuth Server par DnC > Développer > Validation du jeton d’accès avec la déclaration at_hash du jeton (...)

Validation du jeton d’accès avec la déclaration at_hash du jeton d’identité

Si le jeton d’ID contient une déclaration at_hash, le client PEUT l’utiliser pour valider le jeton d’accès.

Ceci est une précaution de sécurité utile (voire indispensable ?). En effet, nous disposons de la faculté de vérifier le JWT avec sa signature, mais nous ne disposons pas de la faculté de valider un jeton d’accès de façon autonome (puisque c’est un jeton opaque) [1]

Encore un bon point pour OpenID Connect ! Un bon point aussi pour la bibliothèque oauth2-server-php de Brent Schaffer qui insère la déclaration at_hash dans le jeton d’identité. Donc un bon point aussi pour OAuthSD.

Ce qui suit est une traduction d’extraits de OpenID Connect Core 1.0

3.1.3.8. Validation du jeton d’accès

Lors de l’utilisation du flux de code d’autorisation, si le jeton d’ID contient une déclaration at_hash, le client PEUT l’utiliser pour valider le jeton d’accès de la même manière que pour le flux implicite, tel que défini dans la section 3.2.2.9, Jeton d’accès renvoyé à partir du point d’extrémité Token.

3.2.2.9. Validation du jeton d’accès

Pour valider un jeton d’accès émis à partir du point d’extrémité d’autorisation avec un jeton d’ID, le client DOIT faire ce qui suit :

- Hash les octets de la représentation ASCII de l’access_token avec l’algorithme de hachage spécifié dans JWA pour le paramètre Alg Header de l’en-tête JOSE de Token ID. Par exemple, si l’alg est RS256, l’algorithme de hachage utilisé est SHA-256.
- Prendre la moitié la plus à gauche du hachage et base64url encoder.
- La valeur de at_hash dans le jeton d’identification DOIT correspondre à la valeur produite à l’étape précédente.

Exemple de code :
PHP

  1. if ( @$jwt['at_hash'] ) {
  2.     // Verify access token
  3.     $hash = hash('sha256', $access_token);
  4.     $ath = substr($hash, 0, strlen($hash) / 2);
  5.     $encryptionUtil = new \OAuth2\Encryption\Jwt();
  6.     $ath = $encryptionUtil->urlSafeB64Encode($ath);
  7.     if ( $ath !== $jwt['at_hash'] ) {
  8.         // Token request error
  9.         exit ('Access Token not valid');
  10.     }      
  11. }

Télécharger

Note :
- Dans l’état actuel du développement, le flux Authorization Code d’OpenID Connect ne comporte la déclaration at_hash que dans le cadre du flux Implicit (type de réponse ’idtoken token’). La généralisation de at_hash est à l’étude. Voyez : https://github.com/bshaffer/oauth2-server-php-docs/issues/113.

Notes

[1Un argument souvent évoqué pour justifier la nécessité de la vérification est que le jeton d’accès et le jeton d’identité ne sont pas couplés strictement.