2FA Auth Pilot
2FA Auth Pilot ajoute une couche de sécurité supplémentaire à la connexion WordPress en exigeant une étape de vérification après l’identifiant et le mot de passe. Le plugin implémente l’algorithme standard Time-based One-Time Password (TOTP) (RFC 6238) et fonctionne avec n’importe quelle application d’authentification compatible, dont Google Authenticator, Microsoft Authenticator, Authy, 1Password et Duo.
Même si un mot de passe est volé, hameçonné ou réutilisé, un attaquant ne peut pas finaliser la connexion sans le code à usage unique généré sur l’appareil de l’utilisateur. Les administrateurs peuvent exiger la 2FA rôle par rôle, définir une période de grâce pendant laquelle les utilisateurs doivent s’inscrire et placer en liste blanche les plages d’IP de confiance, exemptées du second facteur.

Points forts
- Authentification TOTP compatible avec toute application RFC 6238 (Google Authenticator, Microsoft Authenticator, Authy, 1Password, Duo, FreeOTP, …).
- Repli OTP par e-mail qui envoie un code de vérification à 6 chiffres lorsque l’application d’authentification n’est pas disponible.
- Codes de récupération : de 5 à 20 codes de secours à usage unique générés lors de l’inscription, pour les accès d’urgence.
- Application par rôle : chaque rôle WordPress peut être réglé sur Obligatoire, Facultatif ou Désactivé.
- Période de grâce jusqu’à 90 jours pour les rôles obligatoires, afin que les utilisateurs existants ne soient pas verrouillés au moment de l’activation de la 2FA.
- Liste blanche d’IP en notation IPv4 et CIDR pour ignorer la 2FA depuis des réseaux de confiance (bureau, VPN, supervision).
- Mémorisation des appareils de confiance : l’option Se souvenir de cet appareil peut supprimer le challenge 2FA jusqu’à 365 jours sur un navigateur précis.
- Protection des API : XML-RPC et l’API REST WordPress peuvent être placés derrière des contrôles tenant compte de la 2FA.
- Inscription par QR code avec un fallback secret manuel pour les environnements où le QR code ne peut pas être scanné.
- Fenêtre temporelle configurable (1 à 4 intervalles) pour compenser la dérive d’horloge entre le serveur et l’appareil de l’utilisateur.
- Désinstallation propre : option permettant de supprimer toutes les données du plugin lors de sa suppression.
Prérequis
- WordPress 6.0 ou plus récent.
- PHP 7.4 ou plus récent (PHP 8.x recommandé).
- Une horloge serveur précise. Le TOTP repose sur la synchronisation horaire ; une dérive supérieure à 90 secondes entraîne le rejet des codes pourtant valides.
- Une application d’authentification installée sur le smartphone, la tablette ou le gestionnaire de mots de passe de chaque utilisateur.
- Pour le repli OTP par e-mail, une configuration d’envoi de courrier fonctionnelle (le plugin compagnon Mail Pilot ou n’importe quelle intégration SMTP fait l’affaire).
Installation
- Téléchargez l’archive ZIP du plugin.
- Dans l’administration WordPress, ouvrez Extensions → Ajouter → Téléverser une extension.
- Sélectionnez le fichier ZIP et cliquez sur Installer maintenant.
- Cliquez sur Activer.
- Ouvrez Réglages → Authentification à deux facteurs pour démarrer la configuration.
Après l’activation, la 2FA est désactivée globalement par défaut. Aucun utilisateur n’est forcé d’utiliser le nouveau flux de connexion tant que l’administrateur n’a pas activé la fonctionnalité et assigné des exigences par rôle. Cela évite de verrouiller accidentellement quiconque pendant le déploiement initial.
Configuration
Tous les réglages se trouvent sous Réglages → Authentification à deux facteurs et sont répartis dans quatre onglets : Général, Rôles, Liste blanche d’IP et Avancé.
Général
L’onglet Général contrôle le comportement du challenge 2FA une fois activé.

| Réglage | Description |
|---|---|
| Activer la 2FA | Interrupteur principal. Lorsqu’il est coupé, le plugin reste dormant et aucun challenge de connexion n’est affiché. |
| Nom de la société / émetteur | Le libellé qui apparaît à côté de l’entrée dans l’application d’authentification de l’utilisateur. Utilisez le nom du site ou de l’organisation. |
| Fenêtre de code | Nombre d’intervalles de 30 secondes acceptés autour de l’heure courante. Valeurs autorisées : 1 à 4. Une fenêtre plus large tolère mieux la dérive d’horloge mais est légèrement moins stricte. La valeur par défaut 1 convient dans la plupart des cas. |
| Nombre de codes de récupération | Nombre de codes de secours à usage unique générés à l’inscription (5 à 20). Valeur par défaut : 10. |
| Mémoire des appareils (jours) | Durée de validité du cookie Se souvenir de cet appareil (0 à 365). Mettez 0 pour désactiver totalement la mémorisation des appareils de confiance. |
| Repli OTP par e-mail | Lorsqu’il est activé, un lien Envoyer le code par e-mail apparaît sur l’écran du challenge. Le code est envoyé à l’adresse e-mail du compte de l’utilisateur. |
| Période de grâce (jours) | Pour les rôles marqués Obligatoire, nombre de jours dont disposent les utilisateurs pour finaliser leur inscription après la première connexion (0 à 90). Pendant la période de grâce, une bannière de rappel est affichée. |
Prévoyez une période de grâce suffisamment longue pour les utilisateurs qui ne se connectent pas tous les jours. Sept à quatorze jours constitue une valeur par défaut équilibrée pour les sites internes.
Rôles
L’onglet Rôles assigne l’une des trois politiques à chaque rôle WordPress :

- Obligatoire — la 2FA doit être configurée. Une fois la période de grâce expirée, l’utilisateur est contraint de s’inscrire à la prochaine connexion et ne peut pas ignorer l’invite.
- Facultatif — les utilisateurs peuvent s’inscrire depuis leur profil mais ne sont jamais forcés.
- Désactivé — l’onglet 2FA est masqué dans le profil utilisateur et le flux de connexion reste à un seul facteur.
Une configuration durcie typique ressemble à :
| Rôle | Politique recommandée |
|---|---|
| Administrateur | Obligatoire |
| Éditeur | Obligatoire |
| Shop manager / Auteur | Obligatoire ou Facultatif |
| Abonné / Client | Facultatif |
Réglez d’abord Administrateur sur Obligatoire et finalisez votre propre inscription avant de durcir les exigences pour les autres rôles. Gardez toujours au moins une session administrateur ouverte dans un second navigateur pendant les tests.
Liste blanche d’IP
L’onglet Liste blanche d’IP accepte une entrée par ligne, en notation d’adresse simple ou CIDR :
203.0.113.42
198.51.100.0/24
10.0.0.0/8
2001:db8::/32
Les connexions provenant d’une adresse en liste blanche sautent le challenge 2FA mais passent tout de même par le contrôle classique identifiant + mot de passe. Cette fonction est destinée aux réseaux d’entreprise de confiance, jump hosts ou agents de supervision.
Ne placez en liste blanche que des sources serveur à serveur. N’y mettez pas de plages résidentielles ou mobiles : leurs adresses tournent et sont partagées avec des milliers d’utilisateurs sans lien entre eux.
Avancé

L’onglet Avancé contrôle l’intégration avec la surface de requête WordPress et la rétention des données :
- Protéger XML-RPC — lorsqu’il est activé, les requêtes vers
xmlrpc.phpsont rejetées sauf si elles incluent un mot de passe applicatif valide rattaché à un utilisateur ayant finalisé son inscription 2FA. Si vous n’utilisez pas XML-RPC (ce qui est le cas de la plupart des sites modernes), vous pouvez laisser la protection activée. - Protéger l’API REST — les endpoints REST authentifiés vérifient que l’utilisateur appelant a satisfait la 2FA. Les endpoints anonymes (comme le flux public d’articles) restent intacts. Pour contourner ponctuellement, désactivez l’option
tfa_protect_rest_api. - Supprimer toutes les données à la désinstallation — lorsque cette option est activée, supprimer le plugin depuis Extensions → Extensions installées efface également l’ensemble des options, secrets utilisateur, codes de récupération et enregistrements d’appareils. Laissez cette option désactivée si vous prévoyez une désactivation temporaire.
Traductions

L’onglet Traductions expose chaque chaîne destinée au visiteur émise par le plugin — les invites du challenge de connexion, les instructions d’inscription, les messages « trop de tentatives » et le flux de récupération — et vous laisse les surcharger une à une dans chaque langue active du site. C’est la voie recommandée pour les ajustements de ton et les formulations propres à la marque ; les fichiers .po fournis continuent d’assurer la traduction de base lorsqu’aucune surcharge n’est définie.
Utilisation
Pour les administrateurs
- Ouvrez Réglages → Authentification à deux facteurs → Général et activez la 2FA globalement.
- Renseignez Nom de la société / émetteur avec le nom de votre site, pour que les utilisateurs reconnaissent l’entrée dans leur application d’authentification.
- Choisissez une Période de grâce qui laisse aux utilisateurs existants le temps de s’inscrire — quatorze jours constitue une valeur par défaut prudente.
- Passez à l’onglet Rôles et réglez Administrateur sur Obligatoire.
- Déconnectez-vous et finalisez votre propre inscription depuis le profil utilisateur. Vérifiez que le challenge de connexion s’affiche et qu’un code de récupération fonctionne.
- Retournez à l’onglet Rôles et activez progressivement l’application pour Éditeur, Shop Manager et tout autre rôle privilégié.
- Ajoutez si besoin des réseaux de confiance dans l’onglet Liste blanche d’IP.
- Communiquez le déploiement à l’équipe quelques jours avant la fin de la période de grâce.
Débloquer un utilisateur verrouillé
Si un utilisateur perd son téléphone et tous ses codes de récupération :
- Ouvrez Utilisateurs → Tous les utilisateurs et éditez le compte concerné.
- Descendez jusqu’à la section Authentification à deux facteurs.
- Cliquez sur Réinitialiser la 2FA. Le secret, les codes de récupération et les appareils de confiance de l’utilisateur sont effacés.
- À la prochaine connexion, l’utilisateur est traité comme une nouvelle inscription et repasse par le flux QR code.
Seuls les administrateurs peuvent réinitialiser la 2FA d’un autre utilisateur. L’action est consignée dans le journal d’activité WordPress lorsqu’un plugin d’audit est installé.
Pour les utilisateurs finaux (inscription, connexion, récupération)
Première inscription
- Connectez-vous à WordPress avec votre identifiant et votre mot de passe.
- Ouvrez Utilisateurs → Profil (ou Howdy → Modifier le profil).
- Descendez jusqu’à la carte Authentification à deux facteurs et cliquez sur Activer l’authentification à deux facteurs.
- Installez une application d’authentification sur votre téléphone si vous n’en avez pas. Applications recommandées :
- Google Authenticator (iOS, Android)
- Microsoft Authenticator (iOS, Android)
- Authy (iOS, Android, desktop)
- 1Password ou Bitwarden (intégré au gestionnaire de mots de passe)
- Ouvrez l’application et choisissez Ajouter un compte → Scanner un QR code.
- Scannez le QR code affiché sur la page de profil WordPress. Si le scan échoue, touchez Saisir une clé de configuration et tapez le secret affiché sous le QR code.
- L’application commence à produire un nouveau code à 6 chiffres toutes les 30 secondes. Saisissez le code courant dans le champ Vérifier le code et cliquez sur Activer.
- WordPress affiche vos codes de récupération. Téléchargez-les ou imprimez-les et stockez-les en lieu sûr — coffre d’un gestionnaire de mots de passe ou enveloppe scellée. Chaque code n’est utilisable qu’une seule fois.
- Confirmez avoir sauvegardé les codes de récupération. L’inscription est terminée.
Connexion au quotidien
- Saisissez votre identifiant et votre mot de passe comme d’habitude.
- Sur l’écran suivant, ouvrez votre application d’authentification et lisez le code à 6 chiffres en cours.
- Saisissez le code dans le champ de challenge et cliquez sur Vérifier.
- Optionnel : cochez Se souvenir de cet appareil pendant 30 jours (la limite dépend du réglage Mémoire des appareils de l’administrateur). Ne le faites que sur des appareils que vous contrôlez.
- Vous êtes connecté.
Si vous saisissez mal le code, recommencez — l’application affiche un nouveau code toutes les 30 secondes. Les échecs répétés finissent par déclencher les protections standards de WordPress contre le verrouillage de compte.
Utiliser un code de récupération
Lorsque vous n’avez pas votre téléphone :
- Sur l’écran du challenge 2FA, cliquez sur Utiliser un code de récupération.
- Saisissez l’un des codes sauvegardés à l’inscription. Les tirets sont facultatifs.
- Après vous être connecté, ouvrez votre profil et cliquez sur Régénérer les codes de récupération. Les codes de récupération sont à usage unique ; celui que vous venez d’utiliser est désormais invalide.
Repli OTP par e-mail
Si l’administrateur a activé le repli OTP par e-mail, vous verrez également Envoyer le code par e-mail sur l’écran du challenge. En cliquant, un code à usage unique est envoyé à l’adresse e-mail de votre compte, valide pendant dix minutes. C’est une option d’urgence — elle hérite de la sécurité de votre boîte mail, donc elle est moins robuste qu’un code TOTP.
Désactiver la 2FA sur votre compte
Si votre rôle est Facultatif, ouvrez Utilisateurs → Profil, descendez jusqu’à Authentification à deux facteurs et cliquez sur Désactiver. Si votre rôle est Obligatoire, ce bouton est masqué et seul un administrateur peut effacer votre inscription.
FAQ
Quelles applications d’authentification sont prises en charge ? Toute application qui implémente TOTP RFC 6238 avec la période par défaut de 30 secondes et des codes à 6 chiffres. Cela inclut Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden, Duo, FreeOTP et la plupart des tokens matériels prenant en charge le TOTP.
Les utilisateurs peuvent-ils transférer leur secret sur un nouveau téléphone ? Oui. Des applications comme Authy et 1Password synchronisent automatiquement le secret entre les appareils. Avec Google Authenticator, l’utilisateur peut exporter ses comptes depuis l’ancien téléphone ; si ce n’est plus possible, un administrateur peut réinitialiser le secret et réinscrire l’utilisateur.
Que se passe-t-il pendant la période de grâce ? Les utilisateurs soumis à l’obligation voient une bannière de rappel sur chaque page d’administration et un bouton Configurer la 2FA sur leur profil. À la fin de la période de grâce, la connexion suivante force l’inscription avant que l’utilisateur n’atteigne le tableau de bord.
Les codes de récupération sont-ils réutilisables ? Non. Chaque code de récupération est à usage unique. Dès qu’un code est consommé, il est invalidé. Les utilisateurs peuvent régénérer l’ensemble des codes depuis leur profil à tout moment ; régénérer invalide l’ancienne série.
Puis-je désactiver la 2FA temporairement pendant une migration ? Oui. Ouvrez Réglages → Authentification à deux facteurs → Général et coupez l’interrupteur principal. Les secrets et codes de récupération restent en base de données : réactiver la fonctionnalité restaure chaque inscription existante sans forcer les utilisateurs à recommencer.
Le plugin fonctionne-t-il avec WP-CLI ? WP-CLI contourne le flux de connexion web et n’est pas soumis à la 2FA. Restreignez l’accès WP-CLI au niveau du système d’exploitation (clé SSH, sudoers, jump host).
XML-RPC est-il réellement encore utilisé ? La plupart des intégrations modernes sont passées à l’API REST ou aux mots de passe applicatifs. Si vous n’avez pas besoin de XML-RPC, laissez la protection activée ou désactivez l’endpoint au niveau du serveur web.
2FA Auth Pilot fonctionnera-t-il avec d’autres plugins 2FA ? Non. Faire tourner deux plugins 2FA en même temps provoque des doubles invites et un état incohérent. Désactivez tout autre plugin 2FA avant d’activer 2FA Auth Pilot.
Prend-il en charge les clés de sécurité matérielles (WebAuthn / FIDO2) ? La version actuelle se concentre sur le TOTP et l’OTP par e-mail. La prise en charge des clés matérielles figure sur la roadmap.
Où sont stockés les secrets ? Le secret TOTP de chaque utilisateur et les hashes de ses codes de récupération sont stockés dans la table user-meta de WordPress, sur la même base de données que le reste du site. Les codes de récupération sont hashés ; le clair n’est affiché qu’une seule fois, au moment de la génération.
Dépannage
« Code invalide » alors que l’application affiche le bon numéro.
La cause la plus fréquente est la dérive d’horloge. Les codes TOTP sont liés à l’heure courante à 30 secondes près. Vérifiez que l’horloge serveur est synchronisée (NTP / chrony) et que celle du téléphone est réglée sur Automatique. En contournement temporaire, augmentez la Fenêtre de code dans les réglages généraux à 2 ou 3.
Un utilisateur a perdu son téléphone et tous ses codes de récupération. Un administrateur peut réinitialiser la 2FA depuis Utilisateurs → Tous les utilisateurs → Modifier l’utilisateur → Réinitialiser la 2FA. L’utilisateur repassera par le flux QR code à la prochaine connexion. Si l’utilisateur verrouillé est le seul administrateur, voyez le point suivant.
Le seul administrateur est verrouillé. Connectez-vous à la base de données (phpMyAdmin ou WP-CLI) et supprimez les lignes user-meta concernées :
DELETE FROM wp_usermeta
WHERE user_id = <admin-id>
AND meta_key LIKE 'tfa\_auth\_pilot%';L’administrateur pourra alors se connecter normalement et se réinscrire.
Le QR code n’est pas affiché. Vérifiez que l’extension PHP GD est activée. Si GD est absente, le plugin se rabat sur une clé de configuration en mode texte — l’utilisateur peut saisir le secret manuellement dans l’application d’authentification.
Les e-mails d’OTP n’arrivent pas. Envoyez un e-mail de test depuis votre plugin de messagerie transactionnelle (par exemple Mail Pilot → E-mail de test). Si ce test échoue, corrigez d’abord la configuration d’envoi. Les codes sont également écrits dans le journal d’activité WordPress lorsqu’un plugin d’audit est installé.
L’intégration API REST renvoie soudainement 401. Activer Protéger l’API REST exige que les appels authentifiés proviennent d’un utilisateur ayant satisfait la 2FA. Faites passer l’intégration à des mots de passe applicatifs émis par un utilisateur dont le rôle satisfait à la 2FA.
La connexion est lente après activation de la 2FA. Un petit délai (moins d’une seconde) est attendu, dû au rendu du challenge et au repli OTP par e-mail. Des délais plus importants traduisent généralement un timeout du serveur de messagerie. Désactivez temporairement le repli OTP par e-mail pour confirmer.
Les cookies d’appareils de confiance disparaissent immédiatement. Les appareils sont suivis par un cookie signé lié au navigateur. Les fenêtres privées/incognito, les nettoyeurs de cookies agressifs et les bloqueurs de contenu peuvent le supprimer. Réduisez votre dépendance à Se souvenir de cet appareil dans ces environnements.
Pour tout point non couvert ici, contactez le support en précisant : version de WordPress, version de PHP, plugins actifs, message d’erreur exact et une courte description des étapes qui y mènent.