JWT decoder online : tout savoir sur les JSON Web Tokens
Qu'est-ce qu'un JWT ?
Un JWT (JSON Web Token) est un standard ouvert défini par la RFC 7519 (IETF, 2015) qui permet de transmettre des informations de manière compacte et sécurisée entre deux parties sous la forme d'un objet JSON signé. Le token est composé de trois parties séparées par des points : le header (en-tête), le payload (charge utile) et la signature.
Chaque partie est encodée en Base64URL (une variante du Base64 adaptée aux URLs). Le header indique l'algorithme de signature utilisé (HS256, RS256, etc.) et le type de token. Le payload contient les claims (revendications), c'est-à-dire les données transportées par le token. La signature garantit l'intégrité du token et permet de vérifier qu'il n'a pas été modifié.
header.payload.signature → eyJhbGci...eyJzdWIi...SflKxwRJ...
Structure détaillée d'un JWT
Les trois parties d'un JWT
Chaque partie est encodée en Base64URL et séparée par un point
Les claims du payload se divisent en trois catégories : les claims enregistrés (définis par la RFC : sub, iss, exp, iat, aud, nbf, jti), les claims publics (enregistrés dans le registre IANA) et les claims privés (définis par les parties utilisant le token).
8 Ko
taille maximale recommandée d'un JWT pour rester compatible avec les headers HTTP courants
HS256 vs RS256 : quel algorithme choisir ?
HS256 (symétrique)
1 clé
Même secret pour signer et vérifier
RS256 (asymétrique)
2 clés
Clé privée pour signer, publique pour vérifier
L'algorithme HS256 (HMAC-SHA256) utilise une clé secrète symétrique partagée entre l'émetteur et le vérificateur. Il est simple à mettre en place mais impose que toutes les parties connaissent le secret. L'algorithme RS256 (RSA-SHA256) utilise une paire de clés asymétriques : la clé privée signe le token et la clé publique le vérifie.
RS256 est recommandé pour les architectures distribuées et les systèmes de SSO (Single Sign-On) car la clé publique peut être distribuée librement via un endpoint JWKS (JSON Web Key Set) sans compromettre la sécurité. HS256 convient aux architectures simples où un seul service émet et vérifie les tokens.
Ne jamais faire confiance à un JWT non vérifié
Cas d'utilisation des JWT
- Authentification API : le token est transmis dans le header
Authorization: Bearer <token>à chaque requête. - Sessions stateless : le serveur n'a pas besoin de stocker l'état de la session, toutes les informations sont dans le token.
- SSO (Single Sign-On) : un serveur d'identité émet un JWT que plusieurs services peuvent vérifier indépendamment.
- Échange inter-services : dans les architectures microservices, les JWT permettent de propager l'identité entre services.
Erreurs fréquentes à éviter
- Stocker des données sensibles dans le payload. Le payload est lisible par quiconque possède le token. N'y mettez jamais de mots de passe, de numéros de carte bancaire ou de données médicales.
- Ne pas vérifier la signature. Accepter un JWT sans vérifier sa signature permet à un attaquant de forger un token avec les claims de son choix.
- Utiliser alg: "none". Certaines bibliothèques acceptent l'algorithme
none, qui désactive la signature. Configurez toujours une liste blanche d'algorithmes autorisés. - Définir une durée de vie trop longue. Un token avec un
expde plusieurs jours reste valide même si l'utilisateur a été désactivé. Préférez des durées courtes (15 min) avec un mécanisme de refresh token. - Confondre JWS et JWE. Un JWT signé (JWS) garantit l'intégrité mais pas la confidentialité. Pour chiffrer le contenu, utilisez JWE (JSON Web Encryption, RFC 7516).
Sources et références
- RFC 7519 - JSON Web Token (JWT) (IETF, 2015).
- RFC 7515 - JSON Web Signature (JWS) (IETF, 2015).
- RFC 7518 - JSON Web Algorithms (JWA) (IETF, 2015).
- jwt.io : outil de référence pour les JWT (Auth0).
- MDN Web Docs - HTTP Authentication.