JWT: Pratique mais risqué ? Le problème des JWT expliqué

Les JWT sont largement utilisés pour l'authentification, mais sont-ils le meilleur choix ? Découvrez les risques de sécurité, les pièges courants et les meilleures alternatives aux JSON Web Tokens dans cette analyse approfondie.
JWT: Pratique mais risqué ? Le problème des JWT expliqué

Si vous avez déjà suivi des tutoriels en ligne pour créer des projets, vous avez probablement rencontré l’utilisation fréquente des JSON Web Tokens (JWT). Mais vous êtes-vous déjà demandé—le JWT est-il réellement sécurisé ?

Bien qu’il soit largement utilisé, de nombreux développeurs déconseillent de s’appuyer sur le JWT pour l’authentification. Pourquoi donc ? Dans cet article, nous allons examiner ce qu’est un JWT, explorer ses avantages et ses inconvénients, et comprendre pourquoi de nombreux experts recommandent de ne pas l’utiliser pour la gestion des sessions.


Qu’est-ce qu’un JWT ?

Avant de nous pencher sur les préoccupations liées au JWT, commençons par les bases.

  • JWT signifie JSON Web Token.
  • Il s’agit essentiellement d’un jeton basé sur JSON qui permet de vérifier et de faire confiance aux données sans nécessiter de recherche dans une base de données.
  • Le JWT est couramment utilisé pour l’authentification et l’échange sécurisé d’informations entre différentes parties.

Le site officiel fournit plus de détails : JSON Web Tokens — jwt.io

Structure des données d’un JSON Web Token

Comment fonctionne le JWT ?

Voici une explication simplifiée du processus d’authentification via JWT :

  1. Connexion de l’utilisateur : Lorsqu’un utilisateur se connecte à un site web, le serveur génère un JWT et l’envoie à l’utilisateur.
  2. Le jeton comme preuve d’identité : Le JWT contient des informations clés comme l’ID de l’utilisateur, ses rôles et ses permissions.
  3. Requêtes de l’utilisateur : À chaque interaction avec le site, l’utilisateur envoie son JWT avec sa requête.
  4. Vérification côté serveur : Le site vérifie la signature du JWT pour s’assurer qu’il a été émis par une source de confiance et contrôle les informations qu’il contient.
  5. Accès accordé ou refusé : Si le JWT est valide, l’utilisateur obtient l’accès ; sinon, il est refusé.

Le JWT est attrayant, car il permet une authentification sans état—une fois émis, le jeton peut être utilisé sans consulter la base de données.

Flux d’authentification utilisateur avec un JWT


Pourquoi le JWT est-il problématique ?

Bien que le JWT présente certains avantages, il comporte également plusieurs inconvénients majeurs. Examinons ces problèmes un par un.

1. Une surcharge en taille

L’un des principaux inconvénients du JWT est sa taille.

Prenons un simple ID utilisateur, comme “bob” :

  • S’il est stocké dans un cookie, il ne pèsera que 5 octets.
  • S’il est stocké dans un JWT, sa taille augmentera d’environ 51 fois en raison des métadonnées et de la signature.

Des charges utiles plus volumineuses signifient une utilisation accrue de la bande passante et des performances plus lentes, rendant le JWT inefficace pour les systèmes à fort trafic.

Surcharge de taille d’un JSON Web Token


2. Signatures redondantes

Les JWT sont conçus pour être autonomes et utilisent des signatures pour validation. Toutefois, les frameworks web modernes offrent déjà des cookies de session signés et sécurisés par défaut.

  • De nombreux frameworks signent et chiffrent automatiquement les cookies, garantissant leur authenticité.
  • Lorsque vous utilisez des JWT dans des cookies de session, vous obtenez deux couches de signatures—une sur le JWT lui-même et une autre sur le cookie.
  • Cette redondance ajoute de la complexité sans réel avantage en matière de sécurité.

3. Problèmes de révocation de jeton

Contrairement aux cookies de session traditionnels, les JWT ne peuvent pas être facilement révoqués une fois émis, ce qui pose des risques de sécurité.

La déconnexion ne vous déconnecte pas vraiment

Un utilisateur se déconnecte de son compte ? Normalement, sa session devrait être immédiatement invalidée. Mais avec le JWT, le jeton reste valide jusqu’à son expiration.

  • Si un attaquant obtient un JWT avant son expiration, il peut continuer à envoyer des requêtes en se faisant passer pour l’utilisateur.
  • La seule solution pour révoquer un JWT est d’utiliser une liste noire, ce qui contredit le principe du JWT « sans état » et ajoute de la complexité.

Mises à jour de permissions retardées (données obsolètes)

Si un administrateur est rétrogradé à un rôle d’utilisateur classique, mais que son JWT reste valide, il conserve les privilèges d’administrateur jusqu’à l’expiration du jeton, créant une faille de sécurité.


4. Vulnérabilités de sécurité

Les JWT ne sont souvent pas chiffrés

Les JWT sont encodés, mais pas chiffrés. Cela signifie que n’importe qui ayant accès au jeton peut le décoder et lire son contenu.

  • Si un JWT est intercepté, un attaquant peut en extraire les informations utilisateur.
  • Sans chiffrement supplémentaire, les données sensibles contenues dans le jeton sont exposées.

Vulnérabilité aux attaques de type “Man-in-the-Middle” (MITM)

Les JWT sont généralement stockés dans le stockage local ou dans des cookies.

  • S’ils sont stockés dans le stockage local, ils sont vulnérables aux attaques XSS (Cross-Site Scripting).
  • S’ils sont stockés dans des cookies, ils sont sensibles aux attaques CSRF (Cross-Site Request Forgery) s’ils ne sont pas correctement sécurisés.

Quand le JWT est-il utile ?

Malgré ces problèmes, le JWT reste utile dans certains cas précis.

Le JWT est adapté pour :

Les jetons d’autorisation temporaires – Utilisés pour des opérations à court terme, comme l’authentification entre services API.
Les microservices sans état – Facilite le transfert d’identités sans consultation centrale d’authentification.
L’authentification tierce – Utilisé dans OAuth2 pour vérifier les identités.

Le JWT n’est pas adapté pour :

La gestion des sessions utilisateur – Les cookies de session sont plus sûrs et efficaces.
L’authentification à long terme – Un JWT ne peut pas être révoqué avant son expiration.
Les interactions fréquentes – La surcharge de taille le rend inefficace par rapport aux jetons de session légers.


Conclusion : Devriez-vous utiliser JWT ?

Le JWT a son utilité, mais il n’est pas une solution idéale pour la gestion des sessions utilisateur. Sa taille, ses problèmes de révocation et ses risques de sécurité le rendent moins pratique que les cookies de session traditionnels.

Les mécanismes d’authentification basés sur les sessions offrent une approche plus fiable et sécurisée.

Cela dit, le JWT reste pertinent pour des cas spécifiques, notamment l’authentification API et les microservices. Mais si vous développez une application web nécessitant une gestion de session, optez plutôt pour les cookies de session—ils sont plus rapides, plus sûrs et plus faciles à gérer.

Si vous souhaitez expérimenter avec les JWT pour apprendre, allez-y ! Mais pour les systèmes en production, prenez en compte les risques et privilégiez une alternative plus sûre pour gérer les sessions utilisateur.