đŸŽ«
← Retour aux guides

Qu'est-ce que le JWT ? Guide complet des JSON Web Tokens

· Tags: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

Qu'est-ce que le JWT ?

JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit un moyen compact et autonome de transmettre de maniÚre sécurisée des informations entre des parties sous forme d'objet JSON. Les JWT sont le format de jeton dominant dans les applications web modernes, utilisés pour tout, de l'authentification des utilisateurs et de l'autorisation des API à l'échange sécurisé de données entre microservices.

Comment fonctionne l'authentification JWT

L'authentification JWT suit un modÚle sans état (stateless) qui élimine le besoin de stockage de session cÎté serveur. Comprendre ce flux est essentiel pour comprendre pourquoi les JWT sont devenus le choix par défaut pour la sécurité des API modernes.

Le flux d'authentification

  1. L'utilisateur se connecte — Le client envoie les identifiants (nom d'utilisateur et mot de passe) au serveur d'authentification.
  2. Le serveur crĂ©e un JWT — Le serveur valide les identifiants, crĂ©e un JWT contenant l'identitĂ© et les permissions de l'utilisateur, le signe avec une clĂ© secrĂšte ou privĂ©e, puis le renvoie au client.
  3. Le client stocke le jeton — Le client stocke le JWT, gĂ©nĂ©ralement dans localStorage, sessionStorage ou un cookie HTTP-only.
  4. Le client envoie le jeton avec chaque requĂȘte — Pour chaque requĂȘte API suivante, le client inclut le JWT dans le header Authorization en utilisant le schĂ©ma Bearer : Authorization: Bearer <token>.
  5. Le serveur vĂ©rifie le jeton — Le serveur vĂ©rifie la signature du JWT, contrĂŽle l'heure d'expiration et extrait les revendications de l'utilisateur pour autoriser la requĂȘte.
  6. Aucune consultation de session requise — Comme le JWT contient toutes les informations nĂ©cessaires, le serveur n'a pas besoin d'interroger une base de donnĂ©es ou un cache pour identifier l'utilisateur.

Pourquoi c'est important

L'authentification traditionnelle basĂ©e sur les sessions stocke les identifiants de session dans la mĂ©moire ou la base de donnĂ©es du serveur. Chaque requĂȘte authentifiĂ©e nĂ©cessite une consultation. Les JWT Ă©liminent cette consultation — le jeton lui-mĂȘme prouve l'identitĂ© de l'utilisateur. Cela rend les systĂšmes basĂ©s sur JWT intrinsĂšquement Ă©volutifs, car n'importe quel serveur d'un cluster peut vĂ©rifier un jeton sans Ă©tat de session partagĂ©.

JWT vs authentification par session

| Aspect | Authentification JWT | Authentification par session | |--------|--------------------|------------------------------| | Stockage | CĂŽtĂ© client (dans le jeton) | CĂŽtĂ© serveur (en mĂ©moire ou en base de donnĂ©es) | | ÉvolutivitĂ© | Aucun stockage de session partagĂ© nĂ©cessaire | NĂ©cessite un stockage de session partagĂ© entre les instances | | Multi-domaine | Fonctionne naturellement entre domaines | Difficile de partager les sessions | | AdaptĂ© au mobile | Oui (aucun cookie requis) | NĂ©cessite la prise en charge des cookies | | RĂ©vocation | Difficile (jusqu'Ă  l'expiration du jeton) | Facile (supprimer la session du stockage) | | Taille du payload | Plus grande par requĂȘte (jeton dans le header) | Minimale (uniquement l'ID de session) |

Pourquoi JWT est utilisé pour la sécurité des API

Les caractéristiques qui rendent JWT adapté à l'authentification le rendent également idéal pour sécuriser les API.

Sans état et évolutif

Chaque JWT contient toutes les informations dont le serveur a besoin pour autoriser une requĂȘte. Il n'y a pas de base de donnĂ©es de sessions Ă  interroger, pas de cache Ă  vĂ©rifier, pas d'Ă©tat Ă  synchroniser entre les serveurs. Les rĂ©partiteurs de charge (load balancers) peuvent acheminer les requĂȘtes vers n'importe quelle instance de serveur sans coordination.

Multi-domaine et multi-origine

JWT fonctionne naturellement entre diffĂ©rents domaines et origines. Un jeton Ă©mis par auth.example.com peut ĂȘtre utilisĂ© pour accĂ©der Ă  api.example.com et admin.example.com. Cela fait de JWT le fondement des systĂšmes d'authentification unique (SSO).

Autorisation granulaire

Le payload JWT peut inclure des revendications personnalisées pour les rÎles, les permissions et les appartenances à des organisations :

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

Le serveur API lit ces revendications directement depuis le jeton, sans consultation supplémentaire.

JWT pour l'authentification unique (SSO)

L'authentification unique est l'un des cas d'utilisation JWT les plus courants. Dans une architecture SSO typique :

  1. Un utilisateur se connecte au fournisseur d'identitĂ© (IdP) — comme Auth0, Okta ou Keycloak.
  2. L'IdP émet un JWT signé avec sa clé privée.
  3. L'utilisateur présente ce JWT à plusieurs applications.
  4. Chaque application vérifie la signature à l'aide de la clé publique de l'IdP.
  5. Chaque application fait confiance au jeton sans communiquer avec l'IdP Ă  chaque requĂȘte.

Ce modĂšle permet Ă  une seule connexion d'accorder l'accĂšs Ă  des dizaines de services — e-mail, stockage de fichiers, gestion de projet, systĂšmes RH — sans que chaque service n'implĂ©mente son propre flux de connexion.

Bonnes pratiques de sécurité JWT

Bien que JWT fournisse des bases solides pour la sécurité des API, une implémentation correcte est essentielle.

Gardez les jetons à courte durée de vie

DĂ©finissez la revendication exp (expiration) sur une courte durĂ©e — 15 minutes Ă  1 heure pour les jetons d'accĂšs. Utilisez des jetons d'actualisation (refresh tokens) Ă  durĂ©e de vie plus longue (jours ou semaines) pour obtenir de nouveaux jetons d'accĂšs sans demander Ă  l'utilisateur de se rĂ©authentifier.

Utilisez toujours HTTPS

JWT ne chiffre pas son payload. Toute personne qui intercepte le jeton peut le dĂ©coder et lire son contenu. Transmettez toujours les JWT via HTTPS pour empĂȘcher l'interception.

Validez tout

Vérifiez toujours la signature, contrÎlez que le jeton n'a pas expiré, confirmez que aud (audience) correspond à votre application et rejetez les jetons dont les algorithmes sont inattendus.

Stockez les jetons de maniÚre sécurisée

CĂŽtĂ© client, stockez les JWT dans des cookies HTTP-only lorsque c'est possible, ou en mĂ©moire pour les applications Ă  page unique. Évitez localStorage pour les jetons qui donnent accĂšs Ă  des donnĂ©es sensibles.

Idées reçues courantes sur les JWT

« JWT est chiffrĂ©. » — Non. JWT est signĂ©, pas chiffrĂ©. Le payload est encodĂ© en base64url, ce qui est rĂ©versible. JWE (JSON Web Encryption) fournit le chiffrement, mais il s'agit d'une spĂ©cification distincte qui n'est pas couverte par le JWT standard.

« JWT empĂȘche le CSRF. » — Pas Ă  lui seul. Un JWT dans un header Authorization aide, mais si le jeton est dans un cookie, une protection CSRF est toujours nĂ©cessaire.

« JWT sert uniquement Ă  l'authentification. » — JWT est utilisĂ© pour l'authentification, mais aussi pour l'Ă©change de donnĂ©es d'autorisation, les sessions sans Ă©tat et le partage sĂ©curisĂ© d'informations entre services.

Décodez et explorez JWT en ligne

Utilisez l'outil de décodage JWT pour inspecter n'importe quel JSON Web Token. Collez votre jeton et voyez instantanément le header, le payload et l'algorithme de signature décodés. L'outil vous aide à comprendre quelles données vos jetons contiennent et à vérifier qu'ils sont correctement structurés.

Qu'est-ce que le JWT ? Guide complet des JSON Web Tokens - CoolTool