Jetons JWT en JavaScript (Node.js) : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Jetons JWT en JavaScript (Node.js)

\n\n

JSON Web Token (JWT) est un standard ouvert (RFC 7519) pour la création de jetons d'accès basés sur JSON. JWT est largement utilisé pour l'authentification et l'échange d'informations entre le client et le serveur dans les applications web modernes sur Node.js. Dans cet article, nous allons voir comment travailler avec JWT dans l'environnement Node.js en utilisant la bibliothèque populaire jsonwebtoken.

\n\n

Qu'est-ce que JWT ?

\n\n

JWT se compose de trois parties séparées par des points :

\n\n
    \n
  • Header — l'en-tête contenant le type de jeton et l'algorithme de signature (par exemple, HS256 ou RS256).
  • \n
  • Payload — la charge utile, qui stocke les données (claims) : identifiant utilisateur, rôle, durée de vie du jeton, etc.
  • \n
  • Signature — la signature créée à partir du header, du payload et de la clé secrète. La signature garantit que le jeton n'a pas été modifié.
  • \n
\n\n

Visuellement, un JWT ressemble à ceci : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Installation de la bibliothèque jsonwebtoken

\n\n

Pour travailler avec JWT dans Node.js, on utilise le paquet jsonwebtoken. Installez-le via npm :

\n\n
npm install jsonwebtoken
\n\n

Après l'installation, vous pouvez importer la bibliothèque dans votre projet :

\n\n
const jwt = require('jsonwebtoken');
\n\n

Génération (signature) d'un jeton JWT

\n\n

Pour créer un jeton, utilisez la méthode jwt.sign(). Elle prend trois paramètres principaux :

\n\n
    \n
  • payload — un objet avec les données à encoder dans le jeton.
  • \n
  • secretOrPrivateKey — la clé secrète (ou la clé privée pour les algorithmes RSA/ECDSA).
  • \n
  • options — un objet avec des options, par exemple expiresIn pour définir la durée de vie du jeton.
  • \n
\n\n

Exemple de génération d'un jeton :

\n\n
const jwt = require('jsonwebtoken');\n\nconst payload = {\n  userId: 12345,\n  role: 'user'\n};\n\nconst secretKey = 'your-secret-key-here';\n\nconst token = jwt.sign(payload, secretKey, { expiresIn: '1h' });\n\nconsole.log('Jeton généré :', token);
\n\n

Dans cet exemple, le jeton sera valide pendant 1 heure. Vous pouvez également spécifier le temps en secondes (expiresIn: 3600) ou dans d'autres formats, par exemple '7d' (7 jours) ou '30m' (30 minutes).

\n\n

Vérification d'un jeton JWT

\n\n

Pour vérifier l'authenticité du jeton, on utilise la méthode jwt.verify(). Elle retourne le payload décodé si le jeton est valide, ou lève une erreur si le jeton a expiré ou si la signature est incorrecte.

\n\n
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...'; // votre jeton\nconst secretKey = 'your-secret-key-here';\n\ntry {\n  const decoded = jwt.verify(token, secretKey);\n  console.log('Données décodées :', decoded);\n} catch (err) {\n  console.error('Erreur de vérification :', err.message);\n}
\n\n

Si le jeton a expiré, vous obtiendrez l'erreur 'jwt expired'. Si la signature est incorrecte — 'invalid signature'.

\n\n

Décodage sans vérification de la signature

\n\n

Parfois, il est nécessaire de simplement lire les données du jeton sans vérifier la signature (par exemple, pour le débogage). Pour cela, utilisez jwt.decode() :

\n\n
const jwt = require('jsonwebtoken');\n\nconst token = 'eyJhbGciOiJIUzI1NiIs...';\nconst decoded = jwt.decode(token);\n\nconsole.log('Payload sans vérification :', decoded);
\n\n

Important : jwt.decode() ne vérifie pas la signature, ne l'utilisez donc pas pour l'authentification en production.

\n\n

Middleware pour Express avec JWT

\n\n

Dans les applications web Express, JWT est souvent utilisé pour protéger les routes. Créons un middleware simple qui vérifie le jeton à partir de l'en-tête <

Recommendations