Qu'est-ce que JWT ?
JWT (JSON Web Token, prononce "jot") est un standard ouvert (RFC 7519) pour la création de jetons d'accès sécurisés. Un JWT permet de transmettre des informations de manière compacte et auto-contenue entre deux parties sous forme de JSON signe numeriquement. Les JWT sont largement utilises pour l'authentification et l'autorisation dans les API web modernes.
Structure d'un JWT
Un JWT est compose de trois parties séparées par des points : Header (algorithme de signature et type de token), Payload (les claims, c'est-à-dire les données transportees), et Signature (vérification de l'intégrité). Chaque partie est encodee en Base64URL. Le Header specifie l'algorithme (HS256 pour HMAC-SHA256, RS256 pour RSA-SHA256). Le Payload contient des claims standard (iss, sub, exp, iat, aud) et des claims personnalisées (rôle, permissions). La Signature est calculee sur le header et le payload avec une cle secrete ou une paire de clés publique/privée.
Fonctionnement avec les API
Le flux d'authentification typique : le client envoie ses identifiants (login/password), le serveur vérifie et genere un JWT signe, le client stocke le token et l'inclut dans chaque requête suivante via le header Authorization: Bearer
Sécurité et bonnes pratiques
Les bonnes pratiques de sécurité incluent : définir un temps d'expiration court (15-60 minutes pour les access tokens), utiliser des refresh tokens (stockes en httpOnly cookie) pour renouveler les access tokens, ne jamais stocker de données sensibles dans le payload (il est decode, pas chiffre), utiliser RS256 (asymetrique) plutôt que HS256 pour les architectures distribuees, et valider systématiquement la signature, l'expiration et l'audience. Les tokens ne sont pas revocables individuellement sans maintenir une blacklist, ce qui est une limitation importante.
Alternatives et complements
Les alternatives incluent les sessions cote serveur (plus simples, revocables, mais nécessitent un store partage), OAuth 2.0 (protocole complet d'autorisation deleguee utilisant souvent des JWT), et les PASETO (Platform-Agnostic Security Tokens, alternative plus sécurisée par conception). En pratique, les JWT sont souvent utilises au sein d'un flux OAuth 2.0, le JWT étant le format du token délivré par le serveur d'autorisation.