Qu'est-ce qu'un JWT ? Une explication complète des jetons Web JSON
Réponse rapide
Un JWT est une chaîne avec trois parties codées en Base64URL séparées par des points : header.payload.signature. L'en-tête spécifie l'algorithme, la charge utile contient des revendications (ID utilisateur, rôles, expiration) et la signature prouve l'authenticité. Les JWT sont utilisés pour l'authentification sans état. Utilisez notre décodeur JWT gratuit pour inspecter le contenu des jetons dans votre navigateur.
Introduction
Un JWT (JSON Web Token) est un format de jeton compact et sécurisé URL défini par la RFC 7519 pour transmettre en toute sécurité des informations entre les parties en tant qu'objet JSON. Les JWT sont largement utilisés pour l'authentification et l'autorisation dans les applications Web : une fois qu'un utilisateur s'est connecté, le serveur émet un JWT que le client inclut dans les demandes ultérieures pour prouver son identité. Les JWT sont sans état : le serveur n'a pas besoin de rechercher le jeton dans une base de données ; le jeton lui-même contient les réclamations de l'utilisateur et une signature prouvant qu'il n'a pas été falsifié.
Pas à pas
-
Comprendre la structure en trois parties
Un JWT comporte trois parties : l'en-tête (algorithme et type), la charge utile (réclamations) et la signature (prouve l'intégrité). Chaque partie est codée en Base64URL et séparée par des points : eyJhbGciOi...J9.eyJzdWIi...J9.signature. Les deux premières parties sont lisibles par toute personne possédant le jeton ; seule la signature nécessite la clé secrète.
-
Apprenez les allégations standards
La charge utile contient des revendications – des déclarations sur le sujet. Revendications standards : "sub" (identifiant du sujet/utilisateur), "iat" (émis à l'horodatage), "exp" (expiration), "nbf" (pas avant), "iss" (émetteur), "aud" (audience). Les revendications personnalisées peuvent inclure des rôles, des autorisations ou toute autre donnée.
-
Comprendre les algorithmes de signature
Les JWT utilisent la signature symétrique (HS256 – secret partagé) ou asymétrique (RS256, ES256 – paire de clés publique/privée). La signature empêche toute falsification : toute modification d'une partie du jeton invalide la signature. Seul le détenteur de la clé secrète/privée peut créer des tokens valides.
-
Utiliser des JWT pour l'authentification
Après la connexion, le serveur crée un JWT et l'envoie au client. Le client inclut le JWT dans l’en-tête Authorization (jeton Bearer) pour les demandes ultérieures. Le serveur vérifie la signature et vérifie l'expiration — aucune recherche dans la base de données n'est nécessaire.
Exemples
__GARDER_18__ structure
Saisir: Un JWT typique
Sortir: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
En-tête décodé
Saisir: Première partie décodée
Sortir: {"alg": "HS256", "typ": "JWT"}
Charge utile décodée
Saisir: Deuxième partie décodée
Sortir: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Problèmes courants
- Décodage ou vérification : le décodage d'un JWT (lecture de son contenu) ne prouve PAS qu'il est authentique. Vérifiez toujours la signature côté serveur avec la clé secrète avant de faire confiance aux revendications.
- Stockage des JWT dans localStorage : cela les rend accessibles à JavaScript, vulnérables aux attaques XSS. Stockez les cookies dans httpOnly pour une meilleure sécurité.
- Jetons de longue durée : si un jeton est volé, il reste valide jusqu'à son expiration. Utilisez des jetons d'accès de courte durée (15 à 60 minutes) avec des jetons d'actualisation pour les longues sessions.
- Données sensibles dans la charge utile : la charge utile est lisible par toute personne possédant le jeton (elle est Base64, non cryptée). Ne mettez jamais de mots de passe, de cartes de crédit ou de secrets dans la charge utile.
Conseils
- Vérifiez toujours la signature JWT côté serveur avant de faire confiance à toute revendication : le décodage seul ne constitue pas une authentification.
- Utilisez des jetons d'accès de courte durée (15 à 60 minutes) avec des jetons d'actualisation pour les longues sessions afin de minimiser les dommages causés par le vol de jetons.
- Stockez les JWT dans les cookies httpOnly, Secure, SameSite plutôt que localStorage pour empêcher les attaques XSS.
- Utilisez notre décodeur JWT pour inspecter le contenu du jeton à des fins de débogage : votre jeton ne quitte jamais votre navigateur.