Jetons JWT en JavaScript (Node.js) : Guide complet de la bibliothèque jsonwebtoken
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 l'écosystème Node.js, la bibliothèque la plus populaire pour travailler avec JWT est jsonwebtoken. Dans cet article, nous allons détailler comment installer, configurer et utiliser cette bibliothèque pour créer des applications web sécurisées.
Qu'est-ce que JWT et pourquoi en a-t-on besoin ?
JWT est une chaîne composée de trois parties séparées par des points : Header (en-tête), Payload (charge utile) et Signature. Le jeton ressemble à ceci : xxxxx.yyyyy.zzzzz. Les principaux avantages de JWT :
- Sécurité — le jeton est signé avec une clé secrète ou une paire de clés (RSA/ECDSA), garantissant son intégrité.
- Autosuffisance — toutes les informations nécessaires à la vérification de l'authenticité sont contenues dans le jeton lui-même, réduisant ainsi le nombre de requêtes à la base de données.
- Multiplateforme — JWT fonctionne avec n'importe quel langage de programmation et plateforme.
- Flexibilité — vous pouvez ajouter toutes les données personnalisées dans le payload (par exemple, ID utilisateur, rôle).
Installation de la bibliothèque jsonwebtoken
Pour travailler avec JWT dans Node.js, installez le paquet jsonwebtoken via npm :
npm install jsonwebtokenAprès l'installation, importez la bibliothèque dans votre fichier :
const jwt = require('jsonwebtoken');Génération (signature) d'un jeton JWT
Pour créer un jeton, on utilise la méthode jwt.sign(payload, secretOrPrivateKey, options). Voici un exemple de base :
const jwt = require('jsonwebtoken');
const payload = { userId: 123, role: 'user'};
const secretKey = 'my_super_secret_key_123';
const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // le jeton expire dans 1 heure algorithm: 'HS256' // algorithme de signature (par défaut HS256)});
console.log('Jeton généré :', token);Important : Ne stockez jamais la clé secrète dans le code. Utilisez des variables d'environnement (fichier .env). Pour cela, installez le paquet dotenv :
npm install dotenvExemple d'utilisation avec des variables d'environnement :
require('dotenv').config();const jwt = require('jsonwebtoken');
const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });Vérification d'un jeton JWT
Pour vérifier l'authenticité d'un jeton, on utilise la méthode jwt.verify(token, secretOrPublicKey, options). Elle retourne le payload si le jeton est valide, ou lève une erreur si le jeton a expiré ou est invalide.
const token = 'votre_jeton_ici';
try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('Données décodées :', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('Le jeton a expiré'); } else if (err.name === 'JsonWebTokenError') { console.log('Jeton invalide'); } else { console.log('Erreur de vérification :', err.message); }}Notez les champs iat (issued at — date de création) et exp (expiration time — date d'expiration), qui sont automatiquement ajoutés si le paramètre expiresIn est spécifié.
Middleware pour Express.js
Dans les applications réelles, JWT est généralement vérifié dans un middleware. Voici un exemple pour Express.js :
const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c Aussi dans la bibliothèque
Bibliothèque standard Java : aperçu complet et exemples de code
SwiftLint pour Swift : guide complet avec exemples
Client HTTP pour C++ : top bibliothèques pour travailler avec le réseau
Planificateur de tâches en C++ : TaskFlow, CronCpp, Boost.Asio
Génération de PDF en JavaScript : la bibliothèque PDFKit