Glossaire · Test d’API
JWT (JSON Web Token)
En anglais : JWT
Également appelé : JWTs, JSON Web Token, jeton JWT, token JWT
Définition
Un JSON Web Token est un jeton compact et signé, de la forme header.payload.signature, qui transporte des claims comme l’id utilisateur, l’expiration et l’audience.
Un JSON Web Token (JWT, souvent prononcé « jot » en anglais) est une chaîne composée de trois parties encodées en Base64url et séparées par des points : un header qui indique comment le jeton a été signé, un payload de claims (revendications) et une signature. Les API le reçoivent généralement dans l’en-tête Authorization: Bearer <token> et vérifient la signature pour pouvoir se fier aux claims sans interroger une base de données. De nombreux fournisseurs OAuth 2.0 et OpenID Connect émettent leurs access tokens et ID tokens sous forme de JWT.
Exemple
Un payload décodé :
{
"iss": "https://auth.example.com",
"sub": "user_7f3a",
"aud": "orders-api",
"role": "member",
"iat": 1767225600,
"exp": 1767229200
}
iss est l’émetteur, sub le sujet (généralement l’utilisateur), aud le destinataire prévu, et iat/exp les dates d’émission et d’expiration en secondes depuis l’epoch Unix. Lire le payload avec Node 22 ne nécessite aucune bibliothèque :
const [, payload] = token.split('.');
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
Encodé, pas chiffré
Un JWT signé standard (un JWS) est encodé, pas chiffré. Toute personne qui possède le jeton peut lire chaque claim, comme le montre l’extrait ci-dessus. La signature prouve seulement que le jeton a été émis par quelqu’un qui détient la clé et qu’il n’a pas été modifié. Ne mettez donc jamais de secrets ni de données personnelles dans le payload d’un JWT, sauf si le jeton est réellement chiffré (un JWE, un format distinct et moins courant). Décoder un jeton n’est pas le valider : un test qui décode un jeton n’a rien vérifié de son authenticité.
Quoi tester
- Jeton expiré : définissez ou attendez que
expsoit dépassé et attendez-vous à un401. - Payload falsifié : remplacez
roleparadmin, gardez l’ancienne signature, et attendez-vous à un401. S’il est accepté, le serveur ne vérifie pas les signatures. alg: none: un jeton sans signature doit être rejeté.- Mauvaise audience ou mauvais émetteur : un jeton valide pour une autre API ne doit pas fonctionner ici.
- Jeton valide, mauvaises permissions : attendez-vous à un
403, pas à un401, car l’utilisateur est authentifié mais pas autorisé. - Déconnexion et révocation : les JWT restent généralement valides jusqu’à leur expiration ; vérifiez donc ce que fait le système après une déconnexion ou un changement de mot de passe. Une expiration courte associée à des refresh tokens est la parade habituelle.