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, la sécurité des données utilisateur est une priorité. Dans ce guide, nous allons explorer les concepts clés de l'authentification (vérification d'identité) et de l'autorisation (gestion des accès) dans l'environnement Node.js. Vous apprendrez à implémenter l'inscription, la connexion par mot de passe, l'utilisation des jetons JWT et la protection des routes.



1. Concepts de base

  • Authentification — processus de vérification de l'identité (par exemple, email+mot de passe).
  • Autorisation — vérification des droits d'un utilisateur à effectuer une action (rôle admin/user).
  • JWT (JSON Web Token) — méthode compacte de transmission de données sous forme de jeton, souvent utilisée pour les sessions.
  • Hachage des mots de passe — exigence de sécurité obligatoire (bcrypt, argon2).


2. Installation des dépendances

Pour travailler, nous aurons besoin des paquets npm suivants :

npm install express bcryptjs jsonwebtoken dotenv


  • express — framework web
  • bcryptjs — hachage des mots de passe
  • jsonwebtoken — création et vérification des JWT
  • dotenv — gestion des clés secrètes


3. Inscription simple et hachage du mot de passe

Créons un modèle utilisateur de base (pour l'exemple, nous utilisons un tableau en mémoire ; dans un projet réel, remplacez-le par une base de données) :



const bcrypt = require('bcryptjs');const users = []; // simulation de BDD

async function registerUser(email, password) { const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); users.push({ email, password: hashedPassword }); console.log('Utilisateur inscrit :', email);}

// Exemple d'appel :registerUser('user@example.com', 'myPassword123');


4. Authentification avec JWT

Après une connexion réussie, nous délivrons au client un jeton JWT. Le jeton contient l'ID de l'utilisateur et une date d'expiration.



const jwt = require('jsonwebtoken');require('dotenv').config();

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';

function loginUser(email, password) { const user = users.find(u => u.email === email); if (!user) return null;

const isValid = bcrypt.compareSync(password, user.password); if (!isValid) return null;

// Création du jeton const token = jwt.sign( { userId: user.email, role: 'user' }, JWT_SECRET, { expiresIn: '1h' } ); return token;}


5. Middleware pour la protection des routes

Créons un middleware qui vérifie le JWT dans l'en-tête Authorization :



function authMiddleware(req, res, next) {  const authHeader = req.headers['authorization'];  const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN

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

try { const decoded = jwt.verify(token, JWT_SECRET); req.user = decoded; // transmission des données utilisateur à la requête next(); } catch (err) { return res.status(403).json({ message: 'Jeton invalide' }); }}


6. Exemple d'utilisation dans Express

Assemblons le tout — créons des routes pour la connexion et un profil protégé :



const express = require('express');const app = express();app.use(express.json());

// Route de connexionapp.post('/api/login', (req, res) => { const { email, password } = req.body; const token = loginUser(email, password); if (!token) { return res.status(401).json({ message: 'Identifiants incorrects' }); } res.json({ token });});

// Route protégéeapp.get('/api/profile', authMiddleware, (req, res) => { res.json({ message: 'Accès

Recommendations