Autorisation et authentification 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

Autorisation et authentification en JavaScript (Node.js)



Dans le développement web moderne avec Node.js, la sécurité des données utilisateur et le contrôle d'accès sont des tâches cruciales. L'authentification (vérification de l'identité) et l'autorisation (vérification des droits) sont les deux piliers de tout système sécurisé. Dans cet article, nous allons examiner les outils et bibliothèques clés pour implémenter ces mécanismes sur la plateforme Node.js.



Concepts de base

Authentification — processus de vérification que l'utilisateur est bien celui qu'il prétend être (généralement via identifiant/mot de passe, jetons ou biométrie). Autorisation — détermination des actions et ressources accessibles à un utilisateur authentifié (rôles, droits d'accès).



Bibliothèques populaires pour Node.js



1. Passport.js — stratégie d'authentification universelle

Passport.js est la bibliothèque middleware la plus populaire pour Express. Elle prend en charge plus de 500 stratégies : locale (identifiant/mot de passe), OAuth2 (Google, Facebook, GitHub), JWT et bien d'autres.



const passport = require('passport');const LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Nom d\'utilisateur incorrect' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Mot de passe incorrect' }); } return done(null, user); }); }));

// Sérialisation et désérialisation de l'utilisateurpassport.serializeUser(function(user, done) { done(null, user.id);});

passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); });});


2. JSON Web Tokens (JWT) — authentification sans session

La bibliothèque jsonwebtoken permet de créer et vérifier des jetons JWT. C'est idéal pour les API REST et les applications SPA.



const jwt = require('jsonwebtoken');const secretKey = process.env.JWT_SECRET;

// Création du jeton lors de la connexionconst token = jwt.sign( { userId: user.id, role: user.role }, secretKey, { expiresIn: '24h' });

// Middleware pour vérifier le jetonfunction authMiddleware(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN

if (!token) return res.status(401).json({ error: 'Jeton non fourni' });

jwt.verify(token, secretKey, (err, decoded) => { if (err) return res.status(403).json({ error: 'Jeton invalide' }); req.user = decoded; next(); });}


3. bcrypt — hachage sécurisé des mots de passe

Ne stockez jamais les mots de passe en clair ! bcrypt est la référence en matière de hachage avec sel.



const bcrypt = require('bcrypt');const saltRounds = 10;

// Hachage du mot de passe lors de l'inscriptionasync function hashPassword(plainPassword) { const salt = await bcrypt.genSalt(saltRounds); const hash = await bcrypt.hash(plainPassword, salt); return hash;}

// Vérification du mot de passe lors de la connexionasync function checkPassword(plainPassword, hash) { return await bcrypt.compare(plainPassword, hash);}


4. express-session + connect-redis — gestion des sessions

Pour les applications web traditionnelles avec sessions côté serveur, utilisez express-session avec Redis pour la mise à l'échelle.



const session = require('express-session');const RedisStore = require('connect-redis')(session);

app.use(session({ store: new RedisStore({ client: redisClient }), secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, cookie: { secure: process.env.NODE_ENV === 'production', // HTTPS httpOnly: true, maxAge: 24 * 60 * 60 * 1000 // 1 jour }}))

Recommendations