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

WebAuthn Passkeys Phishing

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 :

---

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.

📞 +33 1 23 45 67 89


Autres articles