Auth0 MFA : configurer l'authentification multi-facteurs en production
TOTP, SMS, push, passkeys — configurer le MFA Auth0 de façon granulaire selon le risque utilisateur. Adaptive MFA, policies et gestion des exemptions.
Par Auth0.Expert · 2025-01-12 · 13 min de lecture
Auth0 MFA : guide complet de configuration
TL;DR
Le MFA réduit le risque d'account takeover de 99,9% selon Microsoft. Auth0 supporte TOTP (Google Authenticator), SMS, push (Guardian), email OTP, WebAuthn et passkeys. Ce guide couvre la configuration et les politiques adaptatives.
---
Facteurs MFA disponibles
Un aperçu des principaux facteurs d'authentification multifacteur disponibles sur Auth0, leurs avantages et leurs cas d'usage recommandés.
| Facteur | Sécurité | UX | Recommandé pour | |---------|----------|-----|----------------| | WebAuthn/Passkeys | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Tous les utilisateurs (2025+) | | TOTP (Authenticator) | ⭐⭐⭐⭐ | ⭐⭐⭐ | Tech-savvy, admins | | Auth0 Guardian (push) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Mobiles | | Email OTP | ⭐⭐⭐ | ⭐⭐⭐⭐ | Utilisateurs grand public | | SMS OTP | ⭐⭐ | ⭐⭐⭐⭐ | Uniquement si email impossible | | Recovery Codes | ⭐⭐ | ⭐ | Backup uniquement |
---
Configuration MFA dans Auth0
Voici comment activer et configurer plusieurs facteurs MFA à travers le dashboard Auth0, pour appliquer une politique cohérente.
{
"policy": "all-applications",
"factors": {
"otp": {"enabled": true},
"sms": {"enabled": true},
"email": {"enabled": true},
"push": {"enabled": true},
"webauthn-roaming": {"enabled": true},
"webauthn-platform": {"enabled": true},
"recovery-code": {"enabled": true}
}
}
Ce bloc configure tous les facteurs MFA souhaités dans Auth0 pour l'ensemble de vos applications.
---
MFA Adaptatif : déclencher selon le risque
L'approche adaptative MFA déclenche la vérification selon des critères de risque comme le rôle, le contexte, ou la localisation.
// Action Post Login : MFA conditionnel
exports.onExecutePostLogin = async (event, api) => {
const {
user,
request,
authentication,
stats,
} = event;
// Toujours MFA pour les admins
if (user.app_metadata?.role === 'admin') {
api.multifactor.enable('any');
return;
}
// MFA si changement de pays
const lastCountry = user.app_metadata?.last_login_country;
const currentCountry = request.geoip?.country_code;
if (lastCountry && lastCountry !== currentCountry) {
api.multifactor.enable('any', { allowRememberBrowser: false });
return;
}
// MFA si nouvel appareil (IP jamais vue)
if (stats.logins_count < 2) {
api.multifactor.enable('any', { allowRememberBrowser: true });
return;
}
// MFA si scope sensible demandé
const requestedScopes = event.transaction?.requested_scopes || [];
if (requestedScopes.includes('admin:write')) {
api.multifactor.enable('any');
return;
}
};
Ce code déploie un MFA conditionnel sur Auth0 selon plusieurs scénarios de risque (rôle admin, changement de pays, première connexion ou action sensible).
---
Enrôlement MFA : forcer à la première connexion
Ce script oblige l'utilisateur à s'inscrire à un facteur MFA lors de sa première connexion si ce n'est pas déjà fait.
exports.onExecutePostLogin = async (event, api) => {
// Si l'utilisateur n'a pas encore de facteur MFA
if (!event.user.multifactor?.includes('google-authenticator') &&
!event.user.multifactor?.includes('guardian')) {
// Rediriger vers l'enrôlement
api.multifactor.enable('any');
}
};
Cette fonction garantit que chaque utilisateur configure une méthode MFA dès sa première authentification.
---
"Remember this browser" : durée configurable
Vous pouvez autoriser l'utilisateur à mémoriser un navigateur pour une durée personnalisée et ainsi réduire la friction.
api.multifactor.enable('any', {
allowRememberBrowser: true,
// Durée de mémorisation en secondes (30 jours)
rememberBrowserLifetimeInSeconds: 30 * 24 * 3600,
});
---
WebAuthn / Passkeys : l'avenir du MFA
WebAuthn permet des expériences sans mot de passe robustes et résistantes au phishing, en forçant la méthode appropriée lors de l'authentification.
// Forcer WebAuthn spécifiquement
exports.onExecutePostLogin = async (event, api) => {
if (event.user.app_metadata?.require_passkey) {
api.multifactor.enable('webauthn-platform');
}
};
Avantages des passkeys :
- Résistant au phishing (clé liée au domaine)
- Pas de secret à partager
- Biométrie locale (Face ID, Touch ID, Windows Hello)
- Standard FIDO2/WebAuthn
---
SMS MFA : risques et alternatives
Les SMS sont vulnérables aux attaques de type SIM Swapping ; privilégiez d'autres facteurs MFA pour les comptes à privilèges.
Si vous devez utiliser SMS, voici comment configurer le fournisseur :
// Configurer le provider SMS
{
"provider": "twilio",
"from": "+33123456789",
"twilio_sid": "YOUR_SID",
"twilio_token": "YOUR_TOKEN",
"messaging_service_sid": "MG..."
}
---
Step-up Authentication : MFA ciblé
La step-up authentication permet d'exiger le MFA uniquement lors de certaines actions critiques, pas à chaque connexion.
// Côté API : vérifier le claim 'amr' (authentication methods references)
async function requireMFA(token: string) {
const payload = await verifyToken(token);
const amr = payload.amr || [];
if (!amr.some(m => ['mfa', 'otp', 'swk', 'hwk'].includes(m))) {
throw new Error('MFA requis pour cette action');
}
}
// Côté client : redemander le MFA
const token = await getAccessTokenSilently({
authorizationParams: {
scope: 'openid email admin:write',
acr_values: 'http://schemas.openid.net/pape/policies/2007/06/multi-factor',
},
});
Ce code montre comment appliquer un contrôle MFA dynamique sur vos API en fonction de l'action demandée.
---
Gestion des exemptions MFA
Certains utilisateurs ou réseaux internes doivent pouvoir se connecter sans MFA. Voici un exemple d’exemption sur base d’adresse IP.
// Exempter certains IP internes
exports.onExecutePostLogin = async (event, api) => {
const trustedIPs = ['192.168.1.0/24', '10.0.0.0/8'];
const userIP = event.request.ip;
if (isInRange(userIP, trustedIPs)) return; // Pas de MFA
api.multifactor.enable('any');
};
Ce script permet d'exempter le MFA pour les utilisateurs se connectant depuis des réseaux internes spécifiés.
---
> 🛡️ Implémentation MFA enterprise : nous configurons votre politique MFA adaptative avec les bons facteurs selon votre secteur (RGPD, PCI-DSS, HDS) en 3 jours ouvrés.
📞 +33 1 23 45 67 89 · 📧 [email protected]
Autres articles
- Auth0 et OAuth 2.0 : architecture complète pour comprendre les flux d'autorisation
- OpenID Connect sur Auth0 : ID Token, UserInfo et discovery endpoint expliqués
- Configurer SAML 2.0 avec Auth0 : guide complet pour l'entreprise
- Migrer des Rules vers les Auth0 Actions : guide pas à pas
- Architecture multi-tenant avec Auth0 : organisations, isolation et bonnes pratiques
- Validation des JWT Auth0 : RS256 vs HS256, JWKS et pièges communs
- Concevoir son architecture de tenants Auth0 : dev, staging, prod
- Configurer un domaine personnalisé Auth0 : login.votredomaine.com étape par étape