auth0-express

À utiliser pour ajouter l'authentification (login, logout, routes protégées) aux applications web Express.js — intègre express-openid-connect pour l'authentification par session.

npx skills add https://github.com/auth0/agent-skills --skill auth0-express

Intégration Auth0 avec Express

Ajoutez l'authentification à vos applications web Express.js en utilisant express-openid-connect.


Prérequis

  • Application Express.js
  • Compte Auth0 et application configurée
  • Si vous n'avez pas encore configuré Auth0, utilisez d'abord la skill auth0-quickstart

Quand NE PAS utiliser

  • Applications monopage - Utilisez auth0-react, auth0-vue ou auth0-angular pour l'auth côté client
  • Applications Next.js - Utilisez la skill auth0-nextjs qui gère à la fois le client et le serveur
  • Applications mobiles - Utilisez auth0-react-native pour React Native/Expo
  • APIs sans état - Utilisez un middleware de validation JWT plutôt que l'auth basée sur les sessions
  • Microservices - Utilisez la validation JWT pour l'auth service-à-service

Workflow de démarrage rapide

1. Installer le SDK

npm install express-openid-connect dotenv

2. Configurer l'environnement

Pour une configuration automatisée avec Auth0 CLI, consultez le Setup Guide pour les scripts complets.

Pour une configuration manuelle :

Créez .env :

SECRET=<openssl-rand-hex-32>
BASE_URL=http://localhost:3000
CLIENT_ID=your-client-id
CLIENT_SECRET=your-client-secret
ISSUER_BASE_URL=https://your-tenant.auth0.com

Générez un secret : openssl rand -hex 32

3. Configurer le middleware d'authentification

Mettez à jour votre application Express (app.js ou index.js) :

require('dotenv').config();
const express = require('express');
const { auth, requiresAuth } = require('express-openid-connect');

const app = express();

// Configure Auth0 middleware
app.use(auth({
  authRequired: false,  // Don't require auth for all routes
  auth0Logout: true,    // Enable logout endpoint
  secret: process.env.SECRET,
  baseURL: process.env.BASE_URL,
  clientID: process.env.CLIENT_ID,
  issuerBaseURL: process.env.ISSUER_BASE_URL,
  clientSecret: process.env.CLIENT_SECRET
}));

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

Cela crée automatiquement :

  • /login - Point d'accès de connexion
  • /logout - Point d'accès de déconnexion
  • /callback - Callback OAuth

4. Ajouter des routes

// Public route
app.get('/', (req, res) => {
  res.send(req.oidc.isAuthenticated() ? 'Logged in' : 'Logged out');
});

// Protected route
app.get('/profile', requiresAuth(), (req, res) => {
  res.send(`
    <h1>Profile</h1>
    <p>Name: ${req.oidc.user.name}</p>
    <p>Email: ${req.oidc.user.email}</p>
    <pre>${JSON.stringify(req.oidc.user, null, 2)}</pre>
    <a href="/logout">Logout</a>
  `);
});

// Login/logout links
app.get('/', (req, res) => {
  res.send(`
    ${req.oidc.isAuthenticated() ? `
      <p>Welcome, ${req.oidc.user.name}!</p>
      <a href="/profile">Profile</a>
      <a href="/logout">Logout</a>
    ` : `
      <a href="/login">Login</a>
    `}
  `);
});

5. Tester l'authentification

Démarrez votre serveur :

node app.js

Visitez http://localhost:3000 et testez le flux de connexion.


Documentation détaillée

  • Setup Guide - Scripts de configuration automatisée, configuration de l'environnement, utilisation de Auth0 CLI
  • Integration Guide - Routes protégées, sessions, intégration API, gestion des erreurs
  • API Reference - API middleware complet, options de configuration, propriétés de requête

Erreurs courantes

Erreur Correction
Oubli d'ajouter l'URL de callback dans le tableau de bord Auth0 Ajoutez le chemin /callback aux Allowed Callback URLs (ex. http://localhost:3000/callback)
SECRET manquant ou faible Générez un secret sécurisé avec openssl rand -hex 32 et stockez-le dans .env en tant que SECRET
authRequired: true défini globalement Réglez sur false et utilisez le middleware requiresAuth() sur des routes spécifiques
Application créée en tant que type SPA dans Auth0 Doit être de type Regular Web Application pour l'auth côté serveur
Secret de session exposé dans le code Utilisez toujours des variables d'environnement, ne codez jamais en dur les secrets
baseURL incorrect pour la production Mettez à jour BASE_URL pour correspondre à votre domaine de production
Non-gestion de logout returnTo Ajoutez votre domaine aux Allowed Logout URLs dans le tableau de bord Auth0

Skills connexes

  • auth0-quickstart - Configuration Auth0 basique
  • auth0-migration - Migration d'un autre fournisseur d'auth
  • auth0-mfa - Ajouter l'authentification multifacteur

Référence rapide

Options du middleware :

  • authRequired - Exiger l'auth pour toutes les routes (default: false)
  • auth0Logout - Activer l'endpoint /logout (default: false)
  • secret - Secret de session (requis)
  • baseURL - URL de l'application (requis)
  • clientID - ID client Auth0 (requis)
  • issuerBaseURL - URL du tenant Auth0 (requis)

Propriétés de requête :

  • req.oidc.isAuthenticated() - Vérifier si l'utilisateur est connecté
  • req.oidc.user - Objet de profil utilisateur
  • req.oidc.accessToken - Access token pour les appels API
  • req.oidc.idToken - ID token
  • req.oidc.refreshToken - Refresh token

Cas d'usage courants :

  • Routes protégées → Utilisez le middleware requiresAuth() (voir Étape 4)
  • Vérifier le statut d'auth → req.oidc.isAuthenticated()
  • Obtenir les infos utilisateur → req.oidc.user
  • Appeler les APIs → Integration Guide

Références

Skills similaires