Découvrez ce qu'est un jeton JWT (JSON Web Token), comment il fonctionne, ses avantages pour l'autorisation sans session, et ses différences avec les sessions classiques. Apprenez à utiliser access token et refresh token pour sécuriser vos applications web, mobiles ou API tout en assurant scalabilité et performance.
Le jeton JWT est l'une des méthodes d'autorisation les plus populaires dans les applications web modernes. Utilisé dans les API, les applications mobiles et les services à architecture microservices, il permet d'éviter le stockage des sessions côté serveur.
Alors qu'auparavant, le serveur devait mémoriser chaque utilisateur via des sessions, avec JWT tout fonctionne différemment : toutes les informations sont transmises avec chaque requête. Ce système est plus rapide, plus simple à mettre à l'échelle et mieux adapté aux services distribués.
Dans cet article, nous allons découvrir ce qu'est un jeton JWT, comment il fonctionne, sa structure et ses différences avec les sessions classiques.
Un jeton JWT est une chaîne de caractères spéciale qui contient des informations sur l'utilisateur et permet de l'identifier sans devoir stocker de données côté serveur. JWT signifie JSON Web Token.
En d'autres termes, il s'agit d'un "passeport numérique" obtenu après connexion. Au lieu de vérifier l'utilisateur à chaque fois via la base de données, le serveur lit ce jeton et sait immédiatement qui vous êtes et ce que vous pouvez faire.
Le JWT est largement utilisé dans les applications web et mobiles, ainsi que dans les API. Par exemple :
L'idée principale du JWT : toutes les informations sont stockées dans le jeton lui-même, pas sur le serveur. Cela rend le système plus rapide et plus facile à mettre à l'échelle.
Le jeton ressemble généralement à une longue chaîne séparée par des points, par exemple :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Même s'il ressemble à une suite de caractères aléatoires, il contient en réalité :
Important : JWT ne chiffre pas les données, il les encode seulement. Cela signifie que le contenu peut être décodé mais qu'il ne peut pas être modifié sans invalider la signature.
Le succès du JWT vient du fait qu'il permet l'autorisation sans session. Le serveur n'a pas besoin de stocker l'état utilisateur : toutes les données sont déjà dans le jeton.
Le fonctionnement du JWT repose sur une idée simple : le serveur délivre un jeton une fois, puis se contente de le vérifier à chaque requête, sans mémoriser l'état de l'utilisateur.
localStoragesessionStorageHttpOnly pour plus de sécurité)Authorization: Bearer <jeton>
À retenir : le serveur ne conserve aucune information sur l'utilisateur entre les requêtes. Tout ce dont il a besoin est déjà dans le jeton. C'est pourquoi le JWT est qualifié de stateless (sans état).
Ce mécanisme est particulièrement pratique pour :
Le JWT est souvent utilisé en association avec OAuth : découvrez les détails dans l'article Comment fonctionne OAuth 2.0 : connexion sans mot de passe et sécurité de vos données.
Un jeton JWT est constitué de trois parties séparées par des points : header.payload.signature
Chacune de ces parties est encodée en Base64, ce qui donne l'aspect d'une chaîne illisible mais qui possède une structure lisible à l'intérieur.
Contient des informations sur le type de jeton et l'algorithme de signature.
{
"alg": "HS256",
"typ": "JWT"
}
Partie principale du jeton, elle stocke les informations utiles.
{
"userId": 123,
"role": "admin",
"exp": 1712345678
}
On y retrouve :
Attention : le payload n'est pas chiffré, il est simplement encodé. N'importe qui peut donc le lire.
La partie la plus importante, elle protège le jeton contre la falsification.
La signature est générée à partir :
Si quelqu'un tente de modifier les données du jeton, la signature ne correspondra plus et le serveur rejettera la requête.
En résumé, un JWT est bien plus qu'une simple chaîne : c'est un conteneur autonome contenant à la fois les données et leur protection. Le serveur n'a pas besoin d'interroger la base de données pour savoir qui se connecte : tout est déjà dans le jeton.
Dans l'utilisation du JWT, deux notions sont souvent confondues : authentification et autorisation. Elles sont liées, mais distinctes.
C'est le processus de vérification de l'identité de l'utilisateur. La question à laquelle répond le système : qui es-tu ?
Exemple :
C'est à ce stade que le jeton JWT est généralement créé.
Il s'agit de l'étape suivante : qu'as-tu le droit de faire ?
Par exemple :
Ces informations sont généralement stockées dans le payload du JWT (souvent dans le champ role).
Autrement dit, le JWT réunit les deux processus :
À noter : le JWT ne réalise pas l'authentification lui-même, il ne fait que stocker le résultat de la vérification utilisateur.
Pour comprendre l'intérêt du JWT, il est utile de le comparer à l'approche traditionnelle des sessions.
Après la connexion de l'utilisateur, le serveur :
À chaque requête :
Le serveur conserve donc l'état utilisateur.
Au lieu de conserver des données côté serveur :
Le serveur ne cherche rien en base : il vérifie simplement le jeton.
En résumé : le JWT offre flexibilité et scalabilité, tandis que les sessions privilégient le contrôle et la simplicité de gestion.
Dans la pratique, le JWT n'est presque jamais utilisé seul. On l'associe à un access token et un refresh token pour allier sécurité et confort.
Le jeton d'accès est le jeton principal utilisé lors des requêtes. Caractéristiques :
En cas de vol, l'agresseur n'aura accès que pour une période limitée.
Le refresh token est un jeton secondaire servant à régénérer l'access token. Caractéristiques :
Le combo access + refresh résout ce problème : sécurité et confort réunis.
Cette approche est la norme dans la plupart des systèmes d'authentification modernes.
Le JWT est considéré comme sécurisé, à condition d'être bien implémenté. Des erreurs courantes peuvent conduire à de sérieuses failles.
La principale protection du JWT est sa signature.
Si les données du jeton sont modifiées, la signature ne correspond plus et l'accès est refusé.
Le JWT est un outil puissant, mais il n'est pas adapté à toutes les situations. Il est important d'identifier les cas où il apporte une réelle valeur ajoutée.
Le JWT est conçu pour les architectures :
Mais il n'est pas une solution universelle.
Le jeton JWT est une méthode d'autorisation moderne qui permet de se passer du stockage de sessions côté serveur. Il contient toutes les informations nécessaires et la signature garantit son intégrité, ce qui rend le système à la fois rapide et évolutif.
Nous avons vu :
En pratique, le JWT est idéal pour les API, les applications mobiles et les microservices, mais peut s'avérer excessif pour les projets simples.
Pour résumer : le JWT rime avec commodité et évolutivité, les sessions avec contrôle et simplicité. Le choix dépend de vos objectifs, de votre architecture et de vos exigences de sécurité.