Introduction à OAuth 2.0 et à l'autorisation JWT en JavaScript
Les applications web modernes nécessitent un système d'authentification et d'autorisation fiable. Les deux standards les plus populaires — OAuth 2.0 (protocole d'accès délégué) et JWT (JSON Web Tokens) — sont souvent utilisés ensemble pour créer des API sécurisées. Dans cet article, nous détaillerons comment implémenter OAuth 2.0 et l'autorisation JWT en JavaScript (Node.js) à partir de zéro.
Vous apprendrez :
- Ce qu'est OAuth 2.0 et pourquoi il est nécessaire
- Comment fonctionnent les tokens JWT
- Comment configurer un serveur d'autorisation sur Express
- Comment protéger les routes à l'aide de middleware
Bases d'OAuth 2.0 : Flux et Rôles
OAuth 2.0 définit quatre rôles : Propriétaire de la ressource (utilisateur), Client (application), Serveur d'autorisation (serveur délivrant les tokens), et Serveur de ressources (serveur fournissant les données). Le flux le plus courant est l'octroi de code d'autorisation, utilisé dans les applications web.
Dans cet article, nous nous concentrerons sur l'implémentation du Serveur de ressources et du Serveur d'autorisation en utilisant JWT, plutôt que des fournisseurs externes (Google, GitHub). Cela vous donnera un contrôle total sur le processus.
Installation des dépendances
Pour commencer, créez un nouveau projet Node.js et installez les packages nécessaires :
npm init -ynpm install express jsonwebtoken bcrypt dotenv corsDescriptions des packages :
express— framework pour créer un serveurjsonwebtoken— création et vérification de JWTbcrypt— hachage de mots de passedotenv— travail avec les variables d'environnementcors— configuration de CORS pour l'API
Implémentation de l'autorisation JWT dans Node.js
JWT est un token compact composé de trois parties : en-tête, payload et signature. Nous l'utiliserons pour l'authentification des utilisateurs après une connexion réussie.
Configuration du serveur et du modèle utilisateur
Créez un fichier server.js et définissez la structure de base :
require('dotenv').config();const express = require('express');const jwt = require('jsonwebtoken');const bcrypt = require('bcrypt');const cors = require('cors');
const app = express();app.use(express.json());app.use(cors());
const PORT = process.env.PORT || 3000;const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';
// Stockage temporaire des utilisateurs (utilisez une base de données en production)const users = [];Inscription et hachage du mot de passe
Lors de l'inscription, le mot de passe doit être haché à l'aide de bcrypt :
app.post('/api/register', async (req, res) => { try { const { email, password } = req.body; // Vérifier si l'utilisateur existe const existingUser = users.find(u => u.email === email); if (existingUser) { return res.status(400).json({ message: 'User already exists' }); }
// Hacher le mot de passe const hashedPassword = await bcrypt.hash(password, 10); const newUser = { id: users.length + 1, email, password: hashedPassword }; users.push(newUser);
res.status(201).json({ message: 'User created' }); } catch (error) { res.status(500).json({ message: 'Server error' }); }});Connexion et génération de token JWT
Après avoir vérifié les identifiants, générez un token à l'aide de jsonwebtoken :
app.post('/api/login', async (req, res) => { try { const { email, password } = req.body; // Trouver l'utilisateur const user = users.find(u => u.email === email); if (!user) {