Authentification résistante au phishing : WebAuthn, Passkeys et Auth0
Les mots de passe et OTP SMS sont vulnérables au phishing. WebAuthn et les Passkeys éliminent ce risque. Implémentation avec Auth0.
Par Auth0.Expert · 2025-02-25 · 11 min de lecture
Authentification résistante au phishing avec Auth0
TL;DR
Le phishing contourne le mot de passe ET les OTP SMS. Seule solution résistante au phishing : WebAuthn/Passkeys. La clé cryptographique est liée au domaine — impossible à voler via un faux site.
---
Pourquoi le phishing contourne le MFA traditionnel
Ce scénario montre étape par étape comment un attaquant peut contourner l’authentification multi-facteur classique (mot de passe, OTP SMS). Il illustre pourquoi les approches traditionnelles ne suffisent pas contre le phishing.
Attaque classique :
1. Attaquant crée login-google.evil.com (copie parfaite)
2. Utilisateur entre email + mot de passe
3. Attaquant capture les credentials
4. Attaquant utilise login-google.com/mfa → SMS envoyé à l'utilisateur
5. Utilisateur entre le code OTP → attaquant capture
6. Attaquant accède au compte
WebAuthn résiste car :
- La clé est liée au domaine "google.com" (via RP ID)
- Sur evil.com, la clé ne fonctionne pas
- Même si l'utilisateur est trompé, aucun credential n'est volé
---
WebAuthn : concepts clés
Cette table présente les notions fondamentales de WebAuthn à connaître pour mieux comprendre son fonctionnement dans un contexte Auth0.
| Terme | Signification | |-------|--------------| | RP (Relying Party) | Votre application (auth0.expert) | | Authenticator | Appareil (Touch ID, YubiKey, Windows Hello) | | Credential | Paire clé publique/privée générée sur l'appareil | | Attestation | Preuve que l'authenticator est légitime | | Assertion | Preuve que l'utilisateur possède la clé privée |
---
Configurer WebAuthn dans Auth0
Voici comment activer WebAuthn dans le dashboard Auth0 pour proposer une authentification forte à vos utilisateurs.
{
"webauthn_roaming": {
"enabled": true,
"override_authenticators_per_user_limit": false
},
"webauthn_platform": {
"enabled": true
}
}
Ce bloc configure les deux grands types d’authenticators dans Auth0.
Types d'authenticators :
- Platform : biométrie intégrée (Face ID, Touch ID, Windows Hello)
- Roaming : clé physique externe (YubiKey, Titan Security Key)
---
Enrôlement WebAuthn via API Auth0
Ce code montre comment inscrire un utilisateur à WebAuthn (enrôlement) via l’API Auth0, puis créer et transmettre le credential à Auth0.
// 1. Initier l'enrôlement
const enrollmentResponse = await fetch(
`https://YOUR_DOMAIN.auth0.com/mfa/authenticate`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${mfaToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
client_id: CLIENT_ID,
client_assertion_type: 'webauthn-platform',
}),
}
);
// 2. Créer la credential avec l'API Web Credentials
const credential = await navigator.credentials.create({
publicKey: enrollmentResponse.public_key_credential_creation_options,
});
// 3. Envoyer la credential à Auth0
await fetch(`https://YOUR_DOMAIN.auth0.com/mfa/challenge`, {
method: 'POST',
body: JSON.stringify({
client_id: CLIENT_ID,
credential: {
id: credential.id,
type: credential.type,
rawId: btoa(String.fromCharCode(...new Uint8Array(credential.rawId))),
response: {
clientDataJSON: btoa(String.fromCharCode(
...new Uint8Array(credential.response.clientDataJSON))),
attestationObject: btoa(String.fromCharCode(
...new Uint8Array(credential.response.attestationObject))),
},
},
}),
});
Ce flux complet permet à un utilisateur d’enrôler une clé WebAuthn depuis votre application, garantissant un parcours sécurisé et sans mot de passe.
---
Passkeys : WebAuthn + synchronisation cloud
Voici les avantages et limitations des Passkeys, qui simplifient l’authentification WebAuthn grâce à la synchronisation cloud.
✅ Pas besoin d'un appareil physique dédié
✅ Fonctionne sur tous les appareils Apple/Google de l'utilisateur
✅ Résistant au phishing
✅ Aucun mot de passe à retenir
⚠️ Dépendant de l'écosystème (Apple/Google)
Le code suivant montre comment proposer automatiquement l’enrôlement Passkey aux utilisateurs préférant cette option, via une action Auth0 post-login.
// Force Passkey si disponible
exports.onExecutePostLogin = async (event, api) => {
const hasPasskey = event.user.multifactor?.includes('webauthn-platform');
if (!hasPasskey && event.client.metadata?.prefer_passkeys === 'true') {
// Proposer l'enrôlement passkey
api.redirect.sendUserTo(`${process.env.APP_URL}/enroll-passkey`, {
query: { user_id: event.user.user_id }
});
}
};
Ce code déclenche l’enrôlement Passkey après login si l’utilisateur n’a pas encore activé de passkey.
---
Politique de migration vers WebAuthn
Voici une stratégie de migration progressive pour adopter WebAuthn sur votre plateforme : commencez en optionnel, ciblez les utilisateurs à risque, puis rendez-le obligatoire.
Phase 1 (semaines 1-4) : Proposer WebAuthn en bonus (pas obligatoire) Phase 2 (semaines 5-8) : WebAuthn requis pour les admins et accès sensibles Phase 3 (semaines 9-12) : Tous les utilisateurs — SMS/TOTP conservés comme backup
---
YubiKey : configuration FIDO2 avec Auth0
Ce bloc montre comment vérifier votre YubiKey et l’utiliser comme authentificateur FIDO2 dans Auth0, sans configuration lourde.
# Vérifier la compatibilité YubiKey
ykman info
# Auth0 supporte YubiKey 5 et versions supérieures
# Configuration uniquement via le dashboard/Universal Login
# Pas de configuration spéciale requise — FIDO2 standard
L’utilisation d’une YubiKey FIDO2 avec Auth0 fonctionne directement via le login universel.
---
Outils open source WebAuthn
Voici une sélection d’outils open source populaires pour intégrer WebAuthn dans vos projets selon votre langage.
| Outil | Langage | Étoiles | Usage | |-------|---------|---------|-------| | simplewebauthn | TypeScript | 4.2k | Lib server/client | | py_webauthn | Python | 922 | Serveur Python | | webauthn-rs | Rust | 1.1k | Serveur Rust | | Duo WebAuthn | Go | 587 | Serveur Go |
---
> 🔑 Migration vers Passkeys : nos experts accompagnent votre équipe dans la migration de l'authentification traditionnelle vers WebAuthn, avec stratégie de rollout et gestion du changement.
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