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é.