Passkeys et double authentification sur Laravel : en finir avec les mots de passe vulnérables

11 Nov 2026 | Cybersécurité | Informatique et Technologie

Passkeys et double authentification sur Laravel : en finir avec les mots de passe vulnérables

Hameçonnage, réutilisation de mots de passe, fuites de bases de données : le vol d'identifiants reste l'une des premières portes d'entrée des attaquants. Pour une application Laravel qui gère des données sensibles — CRM, back-office, espace client —, le couple identifiant / mot de passe ne suffit plus. Deux solutions complémentaires s'imposent : la double authentification et les passkeys.

Passkeys, 2FA : de quoi parle-t-on ?

  • Double authentification (2FA) : après le mot de passe, l'utilisateur saisit un code à 6 chiffres généré par une application (Google Authenticator, Microsoft Authenticator, 1Password…), selon le standard TOTP.
  • Passkeys : basées sur le standard WebAuthn, elles remplacent le mot de passe par une paire de clés cryptographiques. La clé privée reste sur l'appareil (téléphone, ordinateur, clé de sécurité) et se déverrouille par empreinte, visage ou code PIN.

Pourquoi les passkeys résistent à l'hameçonnage

Une passkey est liée au nom de domaine du site. Sur un faux site imitant le vôtre, le navigateur ne la proposera tout simplement pas. Il n'y a rien à taper, donc rien à voler. Côté serveur, vous ne stockez qu'une clé publique : une fuite de base de données ne livre aucun secret réutilisable.

Étape 1 : activer la 2FA avec Laravel Fortify

Les starter kits Laravel et Fortify fournissent une double authentification TOTP prête à l'emploi, avec codes de récupération. Dans config/fortify.php :

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
    Features::twoFactorAuthentication([
        'confirm' => true,
        'confirmPassword' => true,
    ]),
],

L'option confirm oblige l'utilisateur à saisir un premier code valide avant l'activation, ce qui évite qu'il se bloque avec une application mal configurée. Ajoutez le trait TwoFactorAuthenticatable au modèle User et publiez les migrations de Fortify.

Rendre la 2FA obligatoire pour les rôles sensibles

Proposer la 2FA ne suffit pas : peu d'utilisateurs l'activent spontanément. Un middleware simple peut l'imposer aux administrateurs :

public function handle(Request $request, Closure $next)
{
    $user = $request->user();

    if ($user?->isAdmin() && is_null($user->two_factor_confirmed_at)) {
        return redirect()->route('two-factor.setup');
    }

    return $next($request);
}

La méthode isAdmin() et la route sont à adapter à votre application.

Étape 2 : ajouter les passkeys

WebAuthn implique un échange en plusieurs temps entre le navigateur et le serveur (challenge, signature, vérification). Ne l'implémentez pas vous-même : utilisez un package maintenu, comme spatie/laravel-passkeys, qui fournit migrations, composants et vérification côté serveur. Les points à prévoir :

  • un écran « Mes passkeys » pour en ajouter, les nommer (« iPhone de Reda ») et les supprimer ;
  • un bouton « Se connecter avec une passkey » sur la page de connexion ;
  • le HTTPS obligatoire et un domaine correctement configuré (WebAuthn ne fonctionne pas sur un domaine incohérent) ;
  • la possibilité d'enregistrer plusieurs passkeys par compte, pour ne pas dépendre d'un seul appareil.

Étape 3 : soigner la récupération de compte

C'est souvent le maillon faible. Un attaquant qui ne peut pas contourner la 2FA tentera la procédure « j'ai perdu mon téléphone ».

  • Fournissez des codes de récupération à usage unique, affichés une seule fois.
  • Pour les comptes administrateurs, exigez une vérification humaine avant toute réinitialisation de la 2FA.
  • Notifiez l'utilisateur par e-mail à chaque ajout ou suppression de passkey ou de 2FA.

Les compléments indispensables

  • Limitation des tentatives (rate limiting) sur la connexion et la saisie du code 2FA.
  • Journalisation des connexions réussies et échouées, avec alerte sur les anomalies.
  • Sessions : cookies Secure, HttpOnly et SameSite, régénération de l'identifiant après connexion.

Ces mesures font partie de notre guide API REST Laravel avec Sanctum pour la partie API, et du durcissement général d'une application.

Plan de déploiement conseillé

  1. Activez la 2FA pour tous, obligatoire pour les administrateurs.
  2. Ajoutez les passkeys en option, mises en avant après la connexion.
  3. Mesurez l'adoption pendant un mois.
  4. Pour les comptes à privilèges, faites des passkeys la méthode recommandée.

Conclusion

La 2FA bloque l'essentiel des attaques par mot de passe volé ; les passkeys suppriment le problème à la racine et simplifient la connexion. Laravel fournit tout le nécessaire pour la première, et l'écosystème rend la seconde accessible en quelques heures. Pour un back-office ou un CRM, ce n'est plus une option.

Commentaires (0)

Aucun commentaire pour le moment.

Laissez un commentaire