image de chargement
Retour au glossaire

Passport.js

Middleware d'authentification flexible pour Node.js supportant plus de 500 stratégies (OAuth, JWT, local) pour sécuriser vos applications web.

Mis à jour le 12 janvier 2026

Passport.js est le middleware d'authentification le plus populaire pour Node.js, offrant une architecture modulaire basée sur des stratégies interchangeables. Utilisé par des milliers d'applications en production, il simplifie l'implémentation de l'authentification sans imposer de structure rigide. Passport.js gère aussi bien l'authentification locale (username/password) que les connexions via OAuth (Google, Facebook), JWT, SAML ou n'importe quel mécanisme personnalisé.

Fondements

  • Architecture basée sur des stratégies pluggables permettant d'ajouter ou modifier les mécanismes d'authentification sans refactoring majeur
  • Middleware Express/Connect s'intégrant naturellement dans le flux de requêtes HTTP avec serialization/deserialization des sessions
  • Écosystème de 500+ stratégies officielles et communautaires couvrant OAuth 1.0/2.0, OpenID, SAML, JWT et protocoles propriétaires
  • Séparation claire entre la logique d'authentification (vérification des credentials) et la gestion de session (persistance de l'utilisateur)

Avantages

  • Réduction drastique du code boilerplate pour implémenter l'authentification multi-providers avec une API unifiée
  • Flexibilité totale pour combiner plusieurs stratégies simultanément (login social + authentification locale + API tokens)
  • Compatibilité native avec Express.js et intégration possible avec tout framework Node.js acceptant les middlewares Connect
  • Sécurité renforcée grâce aux stratégies maintenues par la communauté et auditées régulièrement
  • Gestion automatique des sessions avec support de multiples stores (Redis, MongoDB, PostgreSQL) via express-session

Exemple concret

auth.config.ts
import passport from 'passport';
import { Strategy as LocalStrategy } from 'passport-local';
import { Strategy as JwtStrategy, ExtractJwt } from 'passport-jwt';
import bcrypt from 'bcrypt';
import { UserModel } from './models/User';

// Stratégie locale (username/password)
passport.use(new LocalStrategy(
  async (username, password, done) => {
    try {
      const user = await UserModel.findOne({ username });
      if (!user) {
        return done(null, false, { message: 'Utilisateur introuvable' });
      }
      
      const isValid = await bcrypt.compare(password, user.passwordHash);
      if (!isValid) {
        return done(null, false, { message: 'Mot de passe incorrect' });
      }
      
      return done(null, user);
    } catch (error) {
      return done(error);
    }
  }
));

// Stratégie JWT pour API
passport.use(new JwtStrategy(
  {
    jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
    secretOrKey: process.env.JWT_SECRET,
  },
  async (payload, done) => {
    try {
      const user = await UserModel.findById(payload.sub);
      return done(null, user || false);
    } catch (error) {
      return done(error, false);
    }
  }
));

// Sérialisation pour les sessions
passport.serializeUser((user: any, done) => {
  done(null, user.id);
});

passport.deserializeUser(async (id: string, done) => {
  try {
    const user = await UserModel.findById(id);
    done(null, user);
  } catch (error) {
    done(error);
  }
});

Cette configuration illustre l'utilisation simultanée de deux stratégies : authentification locale pour les formulaires de connexion et JWT pour les appels API. Les fonctions serialize/deserialize gèrent la persistance de l'utilisateur en session.

Mise en œuvre

  1. Installer Passport.js et les stratégies nécessaires : `npm install passport passport-local passport-jwt express-session`
  2. Configurer les stratégies d'authentification en définissant les fonctions de vérification des credentials pour chaque méthode
  3. Implémenter serialize/deserializeUser pour gérer la persistance des sessions utilisateur avec un store adapté (Redis recommandé en production)
  4. Initialiser Passport dans Express avec `app.use(passport.initialize())` et `app.use(passport.session())` après express-session
  5. Protéger les routes avec `passport.authenticate('strategy-name')` en middleware, en spécifiant les options de redirection ou de callback
  6. Configurer les routes de login/logout avec gestion des erreurs et messages flash pour l'expérience utilisateur
  7. Tester les flux d'authentification avec des scénarios de succès/échec et valider la gestion des sessions/tokens

Conseil de production

Utilisez toujours plusieurs couches de sécurité : combinez Passport.js avec des limiteurs de requêtes (express-rate-limit), CSRF protection, helmet.js pour les headers HTTP sécurisés, et implémentez une rotation des tokens JWT avec refresh tokens. Stockez les sessions dans Redis plutôt qu'en mémoire pour permettre la scalabilité horizontale et éviter la perte de sessions lors des redémarrages.

Outils associés

  • express-session : gestion des sessions côté serveur avec support de multiples stores (Redis, MongoDB, PostgreSQL)
  • bcrypt / argon2 : hashage sécurisé des mots de passe avec protection contre les attaques par force brute
  • jsonwebtoken : création et validation de JWT pour l'authentification stateless des API
  • passport-google-oauth20 / passport-facebook : stratégies OAuth 2.0 pour l'authentification sociale
  • connect-flash : messages flash pour afficher les erreurs d'authentification dans les formulaires
  • helmet : sécurisation des headers HTTP pour prévenir les vulnérabilités courantes (XSS, clickjacking)

Passport.js représente un investissement stratégique pour tout projet Node.js nécessitant de l'authentification robuste et évolutive. Sa flexibilité permet de commencer avec une authentification simple et d'évoluer progressivement vers des architectures multi-providers complexes sans réécriture majeure. En production, Passport.js réduit considérablement les risques de sécurité en s'appuyant sur des stratégies éprouvées et maintenues activement, tout en offrant la liberté d'adapter l'authentification aux besoins métier spécifiques.

Termes connexes

L'argentestdéjàsurlatable.

En 1 heure, découvrez exactement combien vous perdez et comment le récupérer.