Dans cet article
Qu'est-ce qu'un JWT ?
Un JWT (JSON Web Token) est un format de jeton compact et sûr pour les URL, utilisé pour transmettre en toute sécurité des informations entre des parties sous forme d'objet JSON. Définis par RFC 7519, les JWT sont la norme de facto pour l'authentification et l'autorisation dans les applications web modernes et les API.
Les JWT sont autonomes — ils contiennent toutes les informations nécessaires pour vérifier l'authenticité du jeton et extraire les revendications des utilisateurs sans interroger une base de données. Cela les rend idéaux pour l'authentification sans état dans les systèmes distribués et les architectures de microservices.
Structure du JWT
Un JWT se compose de trois parties encodées en Base64URL séparées par des points : en-tête.charge-utile.signature.
- En-tête — un objet JSON spécifiant le type de jeton (JWT) et l'algorithme de signature (ex. : HS256, RS256, ES256)
- Charge utile — un objet JSON contenant des revendications : revendications enregistrées (iss, sub, exp, iat), revendications publiques et revendications privées
- Signature — créée en signant l'en-tête et la charge utile encodés avec une clé secrète (HMAC) ou une clé privée (RSA/ECDSA)
Essayez gratuitement — sans inscription
Valider un JWT →Fonctionnement de la validation JWT
La validation JWT implique des vérifications structurelles, la vérification de la signature et la validation des revendications.
- Vérification de la structure — le jeton doit contenir exactement trois segments encodés en Base64URL séparés par deux points
- Validation de l'en-tête — l'en-tête doit contenir des champs typ et alg valides. L'algorithme doit correspondre à ce qu'attend le serveur
- Vérification de la signature — la signature est recalculée en utilisant l'en-tête, la charge utile et la clé de signature. Si la signature recalculée correspond, le jeton n'a pas été falsifié
- Validation des revendications — les revendications exp (expiration), nbf (pas avant) et iss (émetteur) sont vérifiées par rapport à l'heure actuelle et aux valeurs attendues
Cas d'utilisation courants
Les JWT alimentent l'authentification et l'autorisation dans toute la pile web moderne.
- Authentification API — les clients incluent des JWT dans les en-têtes d'autorisation (schéma Bearer) pour authentifier les requêtes API sans sessions
- Authentification unique (SSO) — les fournisseurs d'identité émettent des JWT que plusieurs applications acceptent, permettant une authentification transparente entre applications
- Jetons d'accès OAuth 2.0 — de nombreuses implémentations OAuth utilisent des JWT comme jetons d'accès, encodant les portées et les permissions directement dans le jeton
- Communication de microservices — les services transmettent des JWT pour propager le contexte utilisateur et les décisions d'autorisation à travers les frontières des services
Bonnes pratiques de sécurité JWT
Les JWT sont puissants mais nécessitent une gestion soigneuse pour éviter les pièges de sécurité courants.
- Validez toujours l'algorithme — ne permettez jamais que le champ alg du jeton dicte l'algorithme utilisé par votre serveur. Cela prévient l'attaque de l'algorithme none
- Définissez des délais d'expiration courts — les JWT ne peuvent pas être révoqués une fois émis. Gardez les délais exp courts (15 minutes pour les jetons d'accès) et utilisez des jetons de rafraîchissement pour les sessions de longue durée
- Utilisez des algorithmes asymétriques pour les systèmes distribués — RS256 ou ES256 permettent aux services de vérifier les jetons sans partager le secret de signature
- Ne stockez jamais de données sensibles dans la charge utile — les JWT sont encodés, pas chiffrés. N'importe qui peut décoder la charge utile. Gardez les secrets dans votre base de données, pas dans le jeton
Foire aux questions
Un JWT peut-il être décodé sans la clé secrète ?
Oui. Les charges utiles JWT sont encodées en Base64URL, pas chiffrées. N'importe qui peut décoder et lire l'en-tête et la charge utile. La clé secrète n'est nécessaire que pour vérifier la signature — pour confirmer que le jeton n'a pas été altéré.
Quelle est la différence entre JWS et JWE ?
JWS (JSON Web Signature) est ce que la plupart des gens entendent par JWT — un jeton signé. JWE (JSON Web Encryption) est un jeton chiffré dont la charge utile ne peut pas être lue sans la clé de déchiffrement. La plupart des JWT sont des jetons JWS.
Dois-je stocker les JWT dans localStorage ou dans des cookies ?
Les cookies HttpOnly sont plus sécurisés car ils ne sont pas accessibles via JavaScript (empêchant le vol XSS). localStorage est vulnérable aux attaques XSS. Pour les applications sensibles, utilisez les cookies HttpOnly Secure SameSite.