Qu'est-ce que jwt ?

JWT (JSON Web Token)

Un JSON Web Token (JWT) est une norme ouverte basée sur JSON (RFC 7519) pour créer des jetons d'accès qui affirment un ensemble de revendications. Les JWT sont couramment utilisés pour l'authentification et l'autorisation, notamment dans les applications web et les API.

Structure d'un JWT

Un JWT est composé de trois parties séparées par des points (.):

  1. Header (En-tête) : Définit le type de jeton (JWT) et l'algorithme de signature utilisé (par exemple, HMAC SHA256 ou RSA). Il est encodé en Base64Url.
  2. Payload (Charge utile) : Contient les "revendications" (claims). Ces revendications sont des assertions sur une entité (généralement l'utilisateur) et des métadonnées supplémentaires. Les revendications peuvent être enregistrées (pré-définies), publiques ou privées. Il est encodé en Base64Url.
  3. Signature : Est calculée en utilisant l'en-tête encodé, la charge utile encodée, une clé secrète (ou une clé privée) et l'algorithme spécifié dans l'en-tête. La signature garantit que le jeton n'a pas été altéré. Il est encodé en Base64Url.

Comment fonctionnent les JWT ?

  1. L'utilisateur s'authentifie auprès du serveur (par exemple, en fournissant un nom d'utilisateur et un mot de passe).
  2. Le serveur vérifie les informations d'identification de l'utilisateur.
  3. Si l'authentification réussit, le serveur crée un JWT contenant des informations sur l'utilisateur (par exemple, son ID d'utilisateur, son nom, ses rôles).
  4. Le serveur signe le JWT avec une clé secrète (ou une clé privée).
  5. Le serveur renvoie le JWT à l'utilisateur.
  6. L'utilisateur stocke le JWT (généralement dans un cookie ou dans le stockage local du navigateur).
  7. Chaque fois que l'utilisateur fait une requête à l'API, il inclut le JWT dans l'en-tête de la requête (généralement dans l'en-tête Authorization avec le schéma Bearer).
  8. Le serveur reçoit la requête avec le JWT.
  9. Le serveur vérifie la signature du JWT à l'aide de la clé secrète (ou de la clé publique).
  10. Si la signature est valide, le serveur extrait les informations de l'utilisateur à partir de la charge utile du JWT et accorde l'accès à la ressource demandée.

Avantages des JWT

  • Sans état (Stateless) : Le serveur n'a pas besoin de stocker les informations de session de l'utilisateur. Toutes les informations nécessaires sont contenues dans le JWT.
  • Scalable : Facile à mettre à l'échelle car le serveur n'a pas besoin de maintenir un état de session pour chaque utilisateur.
  • Portable : Peut être utilisé sur différents domaines et plateformes.
  • Sécurisé : La signature garantit l'intégrité du jeton.
  • Efficace : Facile à générer et à vérifier.

Inconvénients des JWT

  • Taille : Peut être plus grand que les cookies.
  • Invalidation : L'invalidation d'un JWT est complexe. Une fois émis, un JWT est valide jusqu'à son expiration. Pour révoquer un JWT avant son expiration, des mécanismes supplémentaires sont nécessaires (par exemple, une liste noire de jetons).
  • Sécurité de la clé : La clé secrète doit être stockée de manière sécurisée.

Liens pertinents (Concepts importants)