Authentification à deux facteurs sur WordPress avec une application, une Passkey ou une YubiKey
L’authentification à deux facteurs sous WordPress est généralement proposée sous forme d’Add-on ou dans le cadre d’une formule premium. ReportedIP Hive intègre d’emblée quatre méthodes d’authentification à deux facteurs : Authenticator App, Passkey ou Hardware Security Key, code par e-mail et SMS. Les méthodes TOTP, Passkey et e-mail sont gratuites dans toutes les formules.
Depuis la version 2.1.36 de Hive (5 août 2026), une Hardware Security Key telle que la YubiKey est officiellement prise en charge et fonctionne sur les trois interfaces d’authentification : la page intermédiaire wp-login, la vitrine WooCommerce et la page de récupération de mot de passe.
Ce guide aborde ces quatre méthodes : comment enregistrer une YubiKey étape par étape, comment l’échelle de Rate Limit met fin au forçage des codes, ainsi que la faille dans le processus de réinitialisation que la plupart des plugins de 2FA laissent ouverte.
Qu’est-ce que ReportedIP Hive ?
ReportedIP Hive est un plugin de sécurité WordPress complet : 16 Attack Sensors, la suite complète d’authentification à deux facteurs (2FA) décrite ici, un système de blocage progressif et des informations sur les menaces issues de la communauté (sur inscription). Le noyau de détection et d’identification est sous licence GPL-2.0 et fonctionne hors ligne. L’ensemble complet des fonctionnalités de ReportedIP Hive est disponible sur la page dédiée au produit.
Les quatre méthodes du noyau
- Authenticator App (TOTP) — Codes RFC 6238, compatible avec Google Authenticator, Authy, 1Password et Microsoft Authenticator. Les clés secrètes sont chiffrées au repos. Gratuit dans toutes les formules.
- Passkey et clé de sécurité (WebAuthn / FIDO2) — Face ID, Touch ID, Windows Hello et clés matérielles telles que celles de la série YubiKey 5. Système résistant au phishing, avec une implémentation interne et sans dépendance à Composer. Une clé par compte est offerte gratuitement dans toutes les formules.
- Code par e-mail — un code à 6 chiffres valable pendant 10 minutes, avec une limite de 3 envois toutes les 15 minutes, un délai d’attente de 60 secondes avant de pouvoir renvoyer le code et 5 tentatives de vérification par code. L’écran de Login ne l’envoie plus automatiquement ; l’utilisateur doit d’abord cliquer sur « Envoyer le code ». Gratuit dans toutes les formules.
- Code SMS — envoyé via le relais géré de reportedip.com pour les formules « Professional » et supérieures. Les numéros sont validés selon la norme E.164 et envoyés dans le monde entier ; le relais répond par un
country_not_supportedpour les rares destinations qu’il ne dessert pas. Les numéros de téléphone sont chiffrés au repos.
Les quatre méthodes s’appuient sur : 10 Recovery Codes à usage unique (hachés au repos, avec un avertissement lorsque le nombre de Recovery Codes restants est inférieur à 3), des Trusted Devices avec une durée de validité configurable (30 jours par défaut), et une application basée sur les rôles avec un délai de grâce (7 jours par défaut) et un compteur de tentatives. Les utilisateurs choisissent la méthode que le défi de Login sollicite en premier grâce à l’option « Définir comme méthode par défaut » pour toute méthode active.
Comment configurer une Hardware Security Key
Une clé matérielle constitue le deuxième facteur d’authentification qui ne peut faire l’objet d’une attaque par Phishing, d’un relais ou d’une lecture à l’écran : WebAuthn lie les identifiants à l’origine du site, de sorte que la clé refuse de valider un domaine similaire. La version 2.1.36 de Hive a officialisé cette approche sur du matériel physique, et non plus uniquement dans l’authentificateur virtuel d’un navigateur.
Quelles clés fonctionnent
- Série YubiKey 5 — USB-A, USB-C et Lightning, y compris les modèles NFC à rapprocher d’un téléphone.
- Clé de sécurité Yubico et autres dispositifs d’authentification FIDO2/CTAP2.
- Passkeys de la plateforme — Face ID, Touch ID et Windows Hello, configurés selon la même procédure.
- Non pris en charge : les anciennes clés U2F qui utilisent uniquement le protocole CTAP1 et aucune version plus récente.
Ed25519 (EdDSA, algorithme COSE -8) figure dans la liste des algorithmes proposés, mais uniquement si libsodium est présent côté serveur pour le vérifier — une clé enregistrée aujourd’hui serait inutile dès demain si le serveur ne pouvait pas vérifier ses signatures. C’est important car Ed25519 est l’algorithme privilégié par le micrologiciel 5.2.3 et les versions ultérieures de la YubiKey. ES256 (-7) sur P-256 et RS256 (-257) restent les solutions de secours, la courbe étant vérifiée explicitement via le chemin COSE EC2.
Le vérificateur est développé en interne : il s’agit d’une implémentation autonome de WebAuthn niveau 2, dotée de son propre décodeur CBOR et d’une conversion COSE vers PEM, qui vérifie les signatures via OpenSSL et, pour Ed25519, via libsodium. La seule dépendance Composer du plugin au moment de l’exécution est son outil de vérification des mises à jour ; ainsi, le code gérant votre Login se trouve dans le code source que vous pouvez consulter sur GitHub, et non dans une bibliothèque fournie par un tiers.
L’enregistrement de la clé se fait en quatre étapes
- Servez le site via HTTPS. WebAuthn ne fonctionne que dans un contexte sécurisé ; par conséquent, un site de test utilisant le protocole HTTP en clair n’affichera pas la boîte de dialogue.
- Ouvrez votre profil WordPress dans wp-admin et recherchez la section consacrée à l’authentification à deux facteurs : c’est là que se trouve le gestionnaire de clés de sécurité, et non dans le Dashboard. Le Setup Wizard propose la même procédure lors de la prise en main.
- Choisissez « Clé de sécurité (USB / NFC) » plutôt que « Cet appareil ». La première option envoie
authenticatorAttachment: cross-platform, tandis que la seconde envoieplatform, ce qui permet à Chrome et Edge d’ouvrir directement la boîte de dialogue appropriée au lieu de proposer d’abord Windows Hello. - Donnez un nom à la clé — « YubiKey office », « clé de secours dans le coffre-fort », jusqu’à 64 caractères — puis touchez-la ou approchez-la du téléphone. La fenêtre de la cérémonie est de 120 secondes au lieu des 60 secondes par défaut de WebAuthn, ce qui laisse le temps d’effectuer un contact NFC.
Une nouvelle clé ne demandera pas de code PIN FIDO2. L’enregistrement demande userVerification: discouraged, conformément aux recommandations de Yubico destinées aux développeurs pour une clé utilisée comme deuxième facteur d’authentification en complément d’un mot de passe ; cette valeur est également appliquée côté serveur et peut être augmentée jusqu’à preferred ou required via le filtre reportedip_hive_webauthn_user_verification. L’enregistrement demande également residentKey: discouraged, de sorte que l’enregistrement d’une YubiKey n’utilise pas l’un de ses emplacements limités pour les identifiants détectables — le flux de Login fournit toujours allowCredentials, de sorte qu’un identifiant détectable n’apporterait rien de plus ici. Les identifiants créés avant cette modification continuent de fonctionner.
L’enregistrement d’une même clé deux fois est refusé par le navigateur via excludeCredentials, et l’Endpoint des options est limité à 10 requêtes par utilisateur toutes les 10 minutes.
Où la clé fonctionne-t-elle après l’enregistrement ?
Les trois surfaces de vérification affichent le même panneau WebAuthn commun et permettent de mener à bien l’intégralité de la procédure : la page interstitielle wp-login, la vérification sur la vitrine WooCommerce (Professional) et la page de réinitialisation du mot de passe. Ces deux dernières ne fonctionnaient pas correctement avant la version 2.1.36 : la vitrine affichait un onglet « Passkey » dont le panneau n’existait pas, et la page de réinitialisation proposait WebAuthn mais ne chargeait aucun script de procédure.
La détection des clones est activée par défaut
Chaque assertion comporte un compteur de signatures. Si le compteur n’avance pas, Hive rejette la connexion, enregistre un événement 2fa_webauthn_counter_regression de gravité « élevée » et envoie un e-mail au titulaire du compte — un compteur qui stagne est le signe révélateur d’un identifiant copié hors de son matériel. Les Passkeys de la plateforme sans compteur, qui indiquent légitimement zéro, continuent de fonctionner. Cet e-mail d’alerte est envoyé à tous les abonnements, et pas seulement à ceux de la formule Business.
Tout autour, on retrouve les vérifications habituelles de la procédure : les défis sont constitués de 32 octets aléatoires, à usage unique et valables pendant 300 secondes ; les assertions et les enregistrements ne comportant pas l’indicateur de présence de l’utilisateur sont rejetés, conformément à la section 7.2 de WebAuthn ; et les Endpoints de Login de WebAuthn sont soumis au même système de verrouillage par adresse IP que le formulaire de code, de sorte qu’ils ne peuvent pas être utilisés pour contourner la Rate Limit.
Une clé est gratuite ; une clé de secours est une fonctionnalité réservée au Business.
Une clé de sécurité ou un Passkey par compte est offert gratuitement dans toutes les formules, y compris l’inscription, le Login sur les trois plateformes, le changement de nom, la suppression et l’e-mail d’alerte en cas de clé clonée. La formule Business ajoute des clés de sécurité avancées : plusieurs clés par compte, dont une peut être conservée dans un coffre-fort à titre de sauvegarde, la détection automatique du modèle et des e-mails pour les événements liés au cycle de vie des clés. La détection du modèle nécessite une attestation directe : le logiciel lit l’AAGUID et le compare à un registre intégré de 90 modèles d’authentificateurs issus du service de métadonnées de la FIDO Alliance, ce qui permet au gestionnaire de clés d’associer une entrée telle que « YubiKey série 5 avec NFC » ou « Windows Hello » sous le nom de la clé.
Cette étiquette est purement informative et fonctionne selon le principe « fail-open » : une attestation manquante ou impossible à vérifier ne bloque jamais une inscription, et aucune chaîne d’autorités de certification d’attestation n’est validée. Pour un deuxième facteur enregistré après un Login réussi par mot de passe, l’attestation n’apporte aucune garantie significative — elle sert uniquement à distinguer deux clés dans une liste. Les inscriptions dans la formule Free demandent attestation: 'none', de sorte que le navigateur n’affiche aucune demande de consentement pour une fonctionnalité que la formule ne comprend pas.
Si vous restez sur la formule Free avec une seule clé, vos Recovery Codes constituent votre solution de secours. Imprimez-les ou utilisez une Authenticator App comme deuxième méthode. Hive ne vous permettra pas de supprimer votre dernière clé tant que WebAuthn est votre seule méthode active et que 2FA est obligatoire pour votre rôle.
L’échelle de Rate Limiting met fin au forçage des codes
Les codes 2FA erronés suivent le même barème progressif que les tentatives de Login infructueuses : 3 codes erronés → 30 s, 5 → 5 min, 10 → 30 min, 15 → 1 h. La 15e tentative infructueuse au niveau de l’adresse IP entraîne un véritable blocage progressif de celle-ci, de sorte qu’un pirate utilisant une attaque par force brute ne peut plus simplement attendre l’expiration du délai et réessayer toutes les heures.
La fonctionnalité de réinitialisation du mot de passe que la plupart des plugins négligent
Le processus de « mot de passe perdu » de WordPress constitue un contournement classique de l’authentification à deux facteurs (2FA) : si votre seul deuxième facteur est l’e-mail, toute personne ayant accès à votre boîte mail reçoit à la fois le lien de réinitialisation et le code via le même canal. Le processus de réinitialisation de Hive exige un deuxième facteur d’authentification autre que l’e-mail — Authenticator App, SMS, clé de sécurité ou code de récupération — avant qu’un nouveau mot de passe ne soit accepté. L’e-mail est exclu par conception. Ce comportement est conforme à la norme NIST SP 800-63B §6.1.2.3 et à l’OWASP ASVS V6.3.
Le système vérifie la validité de chaque méthode éligible avant son affichage : un code TOTP impossible à déchiffrer, un numéro de téléphone manquant ou l’absence d’un fournisseur WebAuthn entraîne le retrait de cette méthode de la liste de sélection. Si aucune méthode n’est utilisable, le processus s’arrête net et un e-mail est envoyé à l’administrateur détaillant le problème, au lieu de plonger l’utilisateur dans une boucle de « code invalide ». Les comptes dont le seul facteur d’authentification est l’e-mail et qui ne disposent d’aucun Recovery Code sont exclus du processus de réinitialisation, ce qui déclenche une alerte à l’administrateur ; ce dernier peut lever cette restriction à l’aide de wp user reset-password <id> --skip-email. Lors d’une réinitialisation par clé de sécurité, le navigateur est lié à l’identité à réinitialiser par un jeton à durée de vie courte généré par le serveur, plutôt que par un paramètre d’URL.
Comment l’activer ?
Dans l’étape « 2FA » du Setup Wizard (ou dans Paramètres → 2FA), activez les méthodes que vous souhaitez proposer, sélectionnez les rôles qui doivent s’inscrire, puis définissez le délai de grâce et le compteur de tentatives manquées. Par défaut, les nouvelles installations autorisent les quatre méthodes ; l’option SMS Relay devient disponible dès qu’un forfait prenant en charge la fonction de relais est activé.
Pour les flux sans interface utilisateur ou personnalisés, l’espace de noms REST reportedip-hive/v1 expose /2fa/challenge, /2fa/verify et /2fa/methods pour les méthodes basées sur du code. WebAuthn en est délibérément absent : une procédure via le navigateur nécessite l’interface admin-ajax sur laquelle elle s’exécute déjà, et la dupliquer dans REST impliquerait de devoir synchroniser deux chemins de code pour un flux critique en matière de sécurité.
Les administrateurs Shell peuvent exécuter wp reportedip 2fa reset <user> pour débloquer un compte verrouillé. wp reportedip 2fa enable <user> --method=webauthn refuse de signaler la méthode pour une personne qui n’a pas de clé enregistrée — ce qui l’empêcherait d’accéder au site — à moins que vous ne transmettiez --force. Les clés elles-mêmes sont enregistrées uniquement dans le navigateur ; il n’existe pas de commande CLI permettant d’en enregistrer une. Sur un Multisite à sous-domaines, les filtres reportedip_hive_webauthn_rp_id et reportedip_hive_webauthn_allowed_origins définissent l’identifiant de la partie de confiance et les origines acceptées.
Questions sur les clés matérielles
Ai-je encore besoin d’une Authenticator App si j’utilise une YubiKey ?
Non, une clé de sécurité suffit à elle seule pour répondre à toutes les exigences de sécurité et passer la barrière de réinitialisation. Conservez tout de même une deuxième méthode ou vos Recovery Codes, car une seule clé constitue un point de défaillance unique.
Que se passe-t-il en cas de perte de la clé ?
Connectez-vous à l’aide de l’un des 10 Recovery Codes, ou avec une deuxième clé si vous disposez d’un compte Business. Un administrateur peut également effacer l’enregistrement à l’aide de wp reportedip 2fa reset <user>. Supprimez ensuite la clé perdue du gestionnaire de clés du profil.
Une clé matérielle fonctionne-t-elle sur un téléphone ?
Oui, il suffit de placer une clé compatible NFC contre l’arrière du téléphone — le délai de 120 secondes prévu à cet effet sert justement à cela. Les clés USB-C fonctionnent via le port du téléphone, et les Passkeys de la plateforme (Face ID, Touch ID) constituent une alternative si vous préférez ne pas avoir de clé sur vous.
Puis-je me connecter uniquement avec la clé, sans mot de passe ?
Non. Dans Hive, la clé n’est qu’un deuxième facteur d’authentification : le mot de passe est vérifié en premier, puis la clé. C’est également pour cette raison que la procédure d’inscription ne demande pas d’identifiant susceptible d’être découvert. La connexion sans mot de passe repose sur un modèle de sécurité différent, et prétendre qu’un deuxième facteur d’authentification en est un serait trompeur.
Pourquoi ma YubiKey a-t-elle saisi des lettres aléatoires dans un champ ?
Si vous touchez une YubiKey en dehors d’une cérémonie en cours, celle-ci saisit son mot de passe à usage unique (OTP) Yubico comme s’il s’agissait d’un clavier. Hive reconnaît cette chaîne de caractères, efface le champ et explique ce qui s’est passé, au lieu d’afficher une erreur prêtant à confusion.
Guides connexes
- Passkeys et WebAuthn : un Login WordPress protégé contre le Phishing
- Service géré de Mail Relay et de SMS Relay pour une transmission fiable des codes OTP
- Une authentification à deux facteurs (2FA) pour WooCommerce qui s’intègre directement à votre thème
Consultez la documentation relative à l’authentification pour plus de détails sur la configuration, parcourez l’intégralité des guides du plugin ReportedIP Hive ou consultez la norme WebAuthn sur le site du W3C.