Guide Complet de Sécurité JWT : Décodage, Vérification et Vulnérabilités Courantes

Utilitaires

Qu'est-ce que JWT ?

JWT (JSON Web Token) est une norme ouverte (RFC 7519) pour transmettre des informations de manière sécurisée entre des parties. C'est le schéma d'authentification API le plus populaire, largement utilisé par OAuth 2.0 et OpenID Connect.

Structure JWT

Un JWT comporte trois parties séparées par . :

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
│        Header        │.│         Payload        │.│        Signature        │
Partie Contenu Encodage
Header Algorithme + type Base64URL
Payload Claims Base64URL
Signature Signature Algorithme(Header + Payload, Secret)

⚠️ Le Header et le Payload sont uniquement encodés en Base64URL—ils ne sont pas chiffrés. N'importe qui peut les décoder et les lire.


Décoder JWT avec ToolsKu

Étapes

  1. Ouvrez le Décodeur JWT
  2. Collez la chaîne JWT
  3. Consultez le Header et le Payload JSON décodés
  4. Vérifiez l'expiration, l'émetteur et d'autres champs

Champs Courants du Payload

Champ Signification Exemple
sub Sujet (ID utilisateur) "user_12345"
iss Émetteur "https://auth.example.com"
aud Audience "api.example.com"
exp Expiration (secondes Unix) 1717200000
iat Émis le 1717196400
nbf Pas avant 1717196400
jti ID JWT (identifiant unique) "a1b2c3d4"

Algorithmes de Signature JWT

Algorithme Type Sécurité Cas d'Usage
HS256 Symétrique Moyenne Service unique, APIs internes
HS384/HS512 Symétrique Moyenne–élevée Exigences de sécurité plus élevées
RS256 Asymétrique Élevée Multi-service, OAuth
ES256 Asymétrique Élevée Mobile, IoT
none Pas de signature ❌ Dangereux Ne jamais utiliser

Symétrique vs Asymétrique

HS256 (symétrique) :
  Signer : HMAC-SHA256(header.payload, shared_secret)
  Vérifier : Même shared_secret
  Problème : Tous les services partagent un secret—une fuite affecte tout

RS256 (asymétrique) :
  Signer : RSA-SHA256(header.payload, private_key)
  Vérifier : RSA-SHA256(header.payload, public_key)
  Avantage : La clé publique peut être distribuée ; la clé privée reste chez l'émetteur

Vulnérabilités de Sécurité Courantes

1. Attaque alg: none

Un attaquant modifie le alg du Header en none et supprime la Signature :

// Header Original
{"alg": "HS256", "typ": "JWT"}

// Modification de l'attaquant
{"alg": "none", "typ": "JWT"}

Défense : Le serveur doit établir une liste blanche des algorithmes autorisés et rejeter none.

2. Attaque par Confusion de Clés

Remplacer RS256 par HS256 et utiliser la clé publique comme secret HMAC :

L'attaquant obtient la clé publique → change alg en HS256 → signe avec la clé publique → le serveur vérifie HMAC avec la clé publique → réussit

Défense : Valider strictement que le alg du Header correspond aux attentes.

3. Fuite de Données Sensibles

Comme le Payload est uniquement encodé en Base64, ne jamais stocker dans un JWT :

  • ❌ Mots de passe, numéros de carte bancaire
  • ❌ Informations personnelles privées
  • ✅ ID utilisateur, rôles, permissions

4. Expiration Inadéquate

// ❌ Pas d'expiration — token valide indéfiniment
{"sub": "user_123"}

// ❌ Expiration trop longue — token compromis reste valide
{"sub": "user_123", "exp": 1893456000}  // année 2030

// ✅ Expiration raisonnable + flux de refresh
{"sub": "user_123", "exp": 1717200000}   // 15–60 minutes

Bonnes Pratiques JWT

1. Access Token de Courte Durée + Refresh Token

Access Token :  Expiration de 15–60 minutes, utilisé pour les appels API
Refresh Token : Expiration de 7–30 jours, utilisé pour obtenir de nouveaux access tokens

2. Lieu de Stockage

Stockage Risque XSS Risque CSRF Recommandé
localStorage Élevé Faible
sessionStorage Élevé Faible
HttpOnly Cookie Faible Élevé ⚠️ Nécessite une protection CSRF
Variable en mémoire Faible Faible ✅ Recommandé pour les SPAs

3. Liste de Vérification

Lors de la validation du JWT sur le serveur, toujours vérifier :

  • La signature est valide
  • exp n'a pas expiré
  • nbf est en vigueur
  • iss est l'émetteur attendu
  • aud inclut le service actuel
  • alg est sur la liste blanche

Débogage des Problèmes JWT

  1. Décoder le JWT : Utilisez le Décodeur JWT pour inspecter le Header et le Payload
  2. Vérifier exp : Le token a-t-il expiré ?
  3. Vérifier alg : L'algorithme de signature correspond-il aux attentes ?
  4. Vérifier iss/aud : L'émetteur et l'audience sont-ils corrects ?
  5. Vérifier la signature : Utilisez le Générateur JWT pour resigner avec le même secret et comparer
  6. Vérifier le transport : L'en-tête Authorization est-il Bearer <token> ?

Outils Connexes


Résumé

JWT est une pierre angulaire de l'authentification API moderne, mais l'encodage Base64 (pas le chiffrement) crée des défis de sécurité uniques. Comprendre la structure, la signature et les vulnérabilités courantes est essentiel pour les développeurs full-stack. Le décodeur JWT de ToolsKu vous aide à déboguer l'authentification rapidement—mais rappelez-vous : décoder n'est pas vérifier ; validez toujours les signatures sur le serveur en production.

#JWT#认证#安全#OAuth#API