C'est quoi un JWT ?
Un JWT (JSON Web Token) est un format de jeton utilisé pour transmettre des informations entre un client et un serveur de manière compacte et vérifiable. Il est très utilisé pour l’authentification et l’autorisation dans les applications web et les API.
Un JWT est généralement composé de trois parties séparées par des points :
header.payload.signature
Le Header indique notamment l’algorithme cryptographique utilisé.
Le Payload contient des claims, c’est-à-dire des informations comme l'identifiant de l’utilisateur, ses rôles ou une date d’expiration :
{ "sub": "12345", "role": "admin", "exp": 1780000000 }
La Signature permet au serveur de vérifier que le token n’a pas été modifié depuis sa création.
Un point important : un JWT n’est pas chiffré par défaut. Le contenu du Header et du Payload est simplement encodé en Base64URL. Il ne faut donc jamais y placer un mot de passe, une clé privée ou une information confidentielle.
Lorsqu’un utilisateur s’authentifie, le serveur peut générer un JWT et le transmettre au client. Celui-ci le renvoie ensuite avec ses requêtes, généralement dans un header HTTP :
Authorization: Bearer <token>
Le serveur vérifie alors la signature, l’expiration et les différents claims avant d’autoriser la requête.
Les JWT sont particulièrement intéressants pour les architectures stateless, car le serveur n’a pas nécessairement besoin de conserver une session en mémoire.
Cependant, leur révocation et leur rotation demandent une conception soigneuse. Un JWT valide jusqu’à son expiration reste généralement utilisable, sauf si l’architecture prévoit un mécanisme supplémentaire de révocation.