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-vueouauth0-angularpour l'auth côté client - Applications Next.js - Utilisez la skill
auth0-nextjsqui gère à la fois le client et le serveur - Applications mobiles - Utilisez
auth0-react-nativepour 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 basiqueauth0-migration- Migration d'un autre fournisseur d'authauth0-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 utilisateurreq.oidc.accessToken- Access token pour les appels APIreq.oidc.idToken- ID tokenreq.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