Skip to Content

2FA Auth Pilot

2FA Auth Pilot añade una capa adicional de seguridad al inicio de sesión de WordPress al exigir un segundo paso de verificación tras el usuario y la contraseña. El plugin implementa el estándar de la industria Time-based One-Time Password (TOTP) (RFC 6238) y funciona con cualquier app de autenticación compatible: Google Authenticator, Microsoft Authenticator, Authy, 1Password o Duo.

Aunque una contraseña se robe, se filtre por phishing o se reutilice, un atacante no puede completar el inicio de sesión sin el código de un solo uso generado en el dispositivo del usuario. Los administradores pueden exigir el 2FA por rol, definir un periodo de gracia durante el cual los usuarios deben darse de alta y autorizar rangos de IP de confianza que queden exentos del segundo factor.

Reto de inicio de sesión 2FA
Reto de inicio de sesión 2FA

Puntos fuertes

  • Autenticación TOTP compatible con cualquier app que siga el RFC 6238 (Google Authenticator, Microsoft Authenticator, Authy, 1Password, Duo, FreeOTP, …).
  • Fallback de OTP por email que envía un código de verificación de 6 dígitos por correo cuando la app de autenticación no está disponible.
  • Códigos de recuperación: de 5 a 20 códigos de respaldo de un solo uso generados durante el alta para accesos de emergencia.
  • Aplicación por rol: cada rol de WordPress puede marcarse como Obligatorio, Opcional o Desactivado.
  • Periodo de gracia de hasta 90 días para los roles obligatorios, así los usuarios existentes no quedan fuera en el momento en que se activa el 2FA.
  • Whitelist de IP con notación IPv4 y CIDR para saltar el 2FA desde redes de confianza (oficina, VPN, monitorización).
  • Recuerdo de dispositivos de confianza: la opción Recordar este dispositivo puede suprimir el reto 2FA hasta 365 días en un navegador concreto.
  • Protección de la API: XML-RPC y la REST API de WordPress pueden quedar tras controles que verifican el 2FA.
  • Alta por código QR con un fallback de clave manual para entornos en los que el QR no se puede escanear.
  • Ventana temporal configurable (1–4 intervalos) para compensar la deriva de reloj entre el servidor y el dispositivo del usuario.
  • Desinstalación limpia opcional, que elimina todos los datos del plugin cuando se borra.

Requisitos

  • WordPress 6.0 o superior.
  • PHP 7.4 o superior (recomendado PHP 8.x).
  • Un reloj de servidor preciso. TOTP depende de la sincronización temporal; una deriva superior a 90 segundos hará que los códigos válidos se rechacen.
  • Una app de autenticación instalada en el smartphone, tablet o gestor de contraseñas de cada usuario.
  • Para el fallback de OTP por email, una configuración de envío saliente que funcione (el plugin acompañante Mail Pilot o cualquier integración SMTP es suficiente).

Instalación

  1. Descarga el archivo ZIP del plugin.
  2. En el administrador de WordPress, abre Plugins → Añadir nuevo → Subir plugin.
  3. Selecciona el ZIP y pulsa Instalar ahora.
  4. Pulsa Activar plugin.
  5. Abre Ajustes → Autenticación en dos factores para empezar a configurar.

Tras la activación, el 2FA queda desactivado globalmente por defecto. Ningún usuario se ve forzado al nuevo flujo de login hasta que el administrador habilita la función y asigna requisitos por rol. Esto evita dejar a alguien fuera por accidente durante el despliegue inicial.

Configuración

Todos los ajustes están en Ajustes → Autenticación en dos factores y se reparten en cuatro pestañas: General, Roles, Whitelist de IP y Avanzado.

General

La pestaña General controla cómo se comporta el reto 2FA una vez activado.

Ajustes generales
Ajustes generales
AjusteDescripción
Activar 2FAInterruptor maestro. Cuando está apagado el plugin queda inactivo y no se muestra ningún reto de login.
Nombre de empresa / emisorLa etiqueta que aparece junto a la entrada en la app de autenticación del usuario. Usa el nombre del sitio o de la organización.
Ventana de códigoNúmero de intervalos de 30 segundos que se aceptan en torno a la hora actual. Valores permitidos: 1–4. Una ventana más amplia tolera mejor la deriva de reloj pero es ligeramente menos estricta. El valor por defecto 1 suele bastar.
Número de códigos de recuperaciónCuántos códigos de respaldo de un solo uso se emiten en el alta (5–20). Valor por defecto: 10.
Memoria de dispositivo (días)Cuánto tiempo es válida la cookie Recordar este dispositivo (0–365). Pon 0 para desactivar por completo el recuerdo de dispositivos.
Fallback de OTP por emailCuando está activo, aparece un enlace Enviar código por email en la pantalla del reto. El código se entrega al correo de la cuenta del usuario.
Periodo de gracia (días)Para los roles marcados como Obligatorio, cuántos días tiene el usuario para completar el alta tras el primer login (0–90). Durante la gracia se muestra un aviso recordatorio.

Deja el periodo de gracia lo bastante amplio para usuarios que no entran a diario. Entre siete y catorce días es un valor equilibrado para sitios con personal.

Roles

La pestaña Roles asigna una de tres políticas a cada rol de WordPress:

Aplicación por rol
Aplicación por rol
  • Obligatorio — El 2FA debe estar configurado. Una vez agotado el periodo de gracia, el usuario se ve forzado a darse de alta en el siguiente login y no puede descartar el aviso.
  • Opcional — Los usuarios pueden darse de alta desde su perfil, pero nunca se les obliga.
  • Desactivado — La pestaña 2FA queda oculta en el perfil del usuario y el flujo de login se queda en factor único.

Una configuración hardened típica sería:

RolPolítica recomendada
AdministradorObligatorio
EditorObligatorio
Shop manager / AutorObligatorio u Opcional
Suscriptor / ClienteOpcional

Pon Administrador en Obligatorio primero y completa tu propia alta antes de subir el requisito a otros roles. Mantén siempre una sesión de administrador abierta en un segundo navegador mientras pruebas.

Whitelist de IP

La pestaña Whitelist de IP acepta una entrada por línea, en formato de dirección única o CIDR:

203.0.113.42 198.51.100.0/24 10.0.0.0/8 2001:db8::/32
Whitelist de IP
Whitelist de IP

Los inicios de sesión procedentes de una dirección en la whitelist se saltan el reto 2FA, pero pasan por la verificación normal de usuario y contraseña. Pensado para redes de oficina de confianza, jump hosts o agentes de monitorización.

Pon en la whitelist solo fuentes servidor a servidor. No añadas rangos residenciales ni de redes móviles; sus direcciones rotan y las comparten miles de usuarios sin relación.

Avanzado

Autenticación en dos factores — pestaña Avanzado
Pestaña Avanzado — controles para XML-RPC y REST API, más el interruptor destructivo de borrado al desinstalar.

La pestaña Avanzado controla la integración con la superficie de peticiones de WordPress y la retención de datos:

  • Proteger XML-RPC — Cuando está activo, las peticiones a xmlrpc.php se rechazan salvo que incluyan una contraseña de aplicación válida vinculada a un usuario con el 2FA completado. Si no usas XML-RPC (los sitios modernos en general no lo usan) puedes dejar la protección activa.
  • Proteger REST API — Los endpoints REST autenticados verifican que el usuario llamante haya superado el 2FA. Los endpoints anónimos (como el feed público de entradas) se quedan intactos. Para hacer un bypass puntual de captura, borra la opción tfa_protect_rest_api.
  • Borrar todos los datos al desinstalar — Si está activo, eliminar el plugin desde Plugins → Plugins instalados elimina también todas las opciones, secretos de usuario, códigos de recuperación y registros de dispositivos. Déjalo desactivado si vas a desactivar el plugin solo temporalmente.

Traducciones

Autenticación en dos factores — pestaña Traducciones
Pestaña Traducciones — sobrescribe cada cadena visible del 2FA por idioma (inglés / italiano / francés / alemán / español / …) sin tocar archivos .po.

La pestaña Traducciones expone todas las cadenas visibles que emite el plugin — los mensajes del reto de login, las instrucciones de alta, los avisos de “demasiados intentos” y el flujo de recuperación — y te permite sobrescribir cada una por idioma activo del sitio. Es la vía recomendada para cambios de tono y redacción de marca; los archivos .po incluidos siguen proporcionando la traducción base cuando no hay sobrescritura.

Uso

Para administradores

  1. Abre Ajustes → Autenticación en dos factores → General y activa el 2FA globalmente.
  2. Pon en Nombre de empresa / emisor el nombre de tu sitio para que los usuarios reconozcan la entrada en su app de autenticación.
  3. Elige un Periodo de gracia que dé tiempo de sobra a los usuarios existentes — catorce días es una opción segura.
  4. Pasa a la pestaña Roles y pon Administrador en Obligatorio.
  5. Cierra sesión y completa tu propia alta desde el perfil de usuario. Verifica que el reto de login aparece y que un código de recuperación funciona.
  6. Vuelve a la pestaña Roles y activa progresivamente la exigencia para Editor, Shop Manager y cualquier otro rol con privilegios.
  7. Opcionalmente añade redes de confianza a la pestaña Whitelist de IP.
  8. Comunica el despliegue al equipo unos días antes de que se agote el periodo de gracia.

Recuperar a un usuario bloqueado fuera

Si un usuario pierde el móvil y todos los códigos de recuperación:

  1. Abre Usuarios → Todos los usuarios y edita la cuenta afectada.
  2. Baja hasta la sección Autenticación en dos factores.
  3. Pulsa Resetear 2FA. El secreto, los códigos de recuperación y los dispositivos de confianza del usuario se borran.
  4. En el siguiente login el usuario es tratado como un alta nueva y pasa de nuevo por el flujo del QR.

Solo los administradores pueden resetear el 2FA de otro usuario. La acción queda registrada en el log de actividad de WordPress si hay un plugin de auditoría instalado.

Para usuarios finales (alta, login y recuperación)

Alta inicial

  1. Inicia sesión en WordPress con usuario y contraseña.
  2. Abre Usuarios → Perfil (o Hola → Editar perfil).
  3. Baja hasta la tarjeta Autenticación en dos factores y pulsa Activar autenticación en dos factores.
  4. Instala una app de autenticación en tu móvil si aún no tienes ninguna. Apps recomendadas:
    • Google Authenticator (iOS, Android)
    • Microsoft Authenticator (iOS, Android)
    • Authy (iOS, Android, escritorio)
    • 1Password o Bitwarden (integradas en el gestor de contraseñas)
  5. Abre la app y elige Añadir cuenta → Escanear código QR.
  6. Escanea el QR que se muestra en la página de perfil de WordPress. Si el escaneo falla, toca Introducir clave de configuración y teclea el secreto que aparece debajo del QR.
  7. La app empezará a generar un nuevo código de 6 dígitos cada 30 segundos. Teclea el código actual en el campo Verificar código y pulsa Activar.
  8. WordPress muestra tus códigos de recuperación. Descárgalos o imprímelos y guárdalos en un lugar seguro — la cámara acorazada de un gestor de contraseñas o un sobre lacrado. Cada código sirve una sola vez.
  9. Confirma que has guardado los códigos de recuperación. El alta está completa.

Login del día a día

  1. Introduce usuario y contraseña como siempre.
  2. En la siguiente pantalla, abre tu app de autenticación y lee el código de 6 dígitos actual.
  3. Tecléalo en el campo del reto y pulsa Verificar.
  4. Opcional: marca Recordar este dispositivo 30 días (el límite depende del ajuste Memoria de dispositivo del administrador). Hazlo solo en dispositivos que controles tú.
  5. Listo, ya estás dentro.

Si te equivocas al teclear el código, vuelve a intentarlo — la app muestra un código nuevo cada 30 segundos. Los fallos repetidos acabarán por activar la protección estándar de bloqueo de login de WordPress.

Usar un código de recuperación

Cuando no tengas el móvil contigo:

  1. En la pantalla del reto 2FA, pulsa Usar un código de recuperación.
  2. Teclea uno de los códigos que guardaste en el alta. Los guiones son opcionales.
  3. Una vez dentro, abre tu perfil y pulsa Regenerar códigos de recuperación. Los códigos de recuperación son de un solo uso; el que acabas de usar ya no vale.

Fallback de OTP por email

Si el administrador ha activado el fallback de OTP por email, también verás Enviar código por email en la pantalla del reto. Al pulsarlo se entrega un código de un solo uso al correo de tu cuenta, válido durante diez minutos. Está pensado como opción de emergencia: hereda la seguridad de tu bandeja de entrada, así que no es tan fuerte como un código TOTP.

Desactivar el 2FA en tu cuenta

Si tu rol es Opcional, abre Usuarios → Perfil, baja hasta Autenticación en dos factores y pulsa Desactivar. Si tu rol es Obligatorio, este botón queda oculto y solo un administrador puede limpiar tu alta.

FAQ

¿Qué apps de autenticación son compatibles? Cualquier app que implemente TOTP según el RFC 6238 con el periodo por defecto de 30 segundos y códigos de 6 dígitos. Esto incluye Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden, Duo, FreeOTP y la mayoría de tokens hardware con soporte TOTP.

¿Pueden los usuarios trasladar su secreto a un móvil nuevo? Sí. Apps como Authy y 1Password sincronizan el secreto entre dispositivos automáticamente. En Google Authenticator, el usuario puede exportar las cuentas del móvil antiguo o, si eso ya no es posible, un administrador puede resetear el secreto y darle de alta de nuevo.

¿Qué pasa durante el periodo de gracia? Los usuarios obligatorios ven un aviso recordatorio en cada página de admin y un botón Configurar 2FA en su perfil. Cuando el periodo de gracia termina, el siguiente login fuerza el alta antes de que el usuario llegue al escritorio.

¿Los códigos de recuperación se pueden reutilizar? No. Cada código de recuperación es de un solo uso. En cuanto se consume queda invalidado. El usuario puede regenerar todo el lote desde su perfil en cualquier momento; al regenerar se invalida el lote anterior.

¿Puedo desactivar el 2FA temporalmente durante una migración? Sí. Abre Ajustes → Autenticación en dos factores → General y apaga el interruptor maestro. Los secretos de usuario y los códigos de recuperación se mantienen en la base de datos, así que al reactivar la función se restauran todas las altas existentes sin obligar a los usuarios a volver a darse de alta.

¿Funciona el plugin con WP-CLI? WP-CLI se salta el flujo de login web y no está sujeto al 2FA. Restringe el acceso a WP-CLI a nivel de sistema operativo (clave SSH, sudoers, jump host).

¿De verdad sigue usándose XML-RPC? La mayoría de integraciones modernas han migrado a la REST API o a las contraseñas de aplicación. Si no necesitas XML-RPC, deja la protección activa o desactiva el endpoint a nivel de servidor web.

¿Funciona 2FA Auth Pilot junto a otros plugins de 2FA? No. Ejecutar dos plugins de 2FA a la vez produce avisos duplicados y un estado inconsistente. Desactiva cualquier otro plugin de 2FA antes de activar 2FA Auth Pilot.

¿Soporta llaves de seguridad hardware (WebAuthn / FIDO2)? La versión actual se centra en TOTP y OTP por email. El soporte de llaves hardware está en la hoja de ruta.

¿Dónde se guardan los secretos? El secreto TOTP de cada usuario y los hashes de los códigos de recuperación se almacenan en la tabla user-meta de WordPress, en la misma base de datos que el resto del sitio. Los códigos de recuperación se guardan hasheados; el texto en claro se muestra una única vez, en el momento de generarlos.

Resolución de problemas

“Código no válido” aunque la app muestra el número correcto. La causa más habitual es la deriva de reloj. Los códigos TOTP están ligados a la hora actual con resolución de 30 segundos. Comprueba que el reloj del servidor esté sincronizado (NTP / chrony) y que el del móvil esté en Automático. Como solución temporal, sube la Ventana de código en los ajustes generales a 2 o 3.

Un usuario ha perdido el móvil y todos los códigos de recuperación. Un administrador puede resetear el 2FA del usuario desde Usuarios → Todos los usuarios → Editar usuario → Resetear 2FA. El usuario volverá a pasar por el flujo del QR en el siguiente login. Si el usuario bloqueado fuera es el único administrador, mira el siguiente apartado.

El único administrador se ha quedado fuera. Conéctate a la base de datos (phpMyAdmin o WP-CLI) y borra las filas user-meta correspondientes:

DELETE FROM wp_usermeta WHERE user_id = <admin-id> AND meta_key LIKE 'tfa\_auth\_pilot%';

A continuación el administrador podrá iniciar sesión con normalidad y volver a darse de alta.

El código QR no se muestra. Comprueba que PHP tenga la extensión GD activada. Si falta GD, el plugin recae en una clave de configuración en modo texto — el usuario puede teclear el secreto a mano en la app de autenticación.

No llegan los mensajes con el OTP por email. Envía un correo de prueba desde tu plugin de correo transaccional (por ejemplo Mail Pilot → Email de prueba). Si esa prueba falla, arregla primero la configuración de envío saliente. Los códigos también quedan registrados en el log de actividad de WordPress si hay un plugin de auditoría instalado.

La integración con la REST API empieza a devolver 401 sin previo aviso. Activar Proteger REST API exige que las llamadas autenticadas provengan de un usuario con el 2FA completado. Cambia la integración para que use contraseñas de aplicación emitidas por un usuario cuyo rol tenga el 2FA superado.

El login va lento tras activar el 2FA. Una demora pequeña (por debajo de un segundo) es normal por el renderizado del reto y del OTP por email. Demoras más largas suelen indicar un timeout del servidor de correo. Desactiva el fallback de OTP por email temporalmente para confirmarlo.

Las cookies de dispositivo de confianza desaparecen de inmediato. Los dispositivos se rastrean mediante una cookie firmada vinculada al navegador. Las ventanas privadas/incógnito, los limpiadores agresivos de cookies y los bloqueadores de contenido pueden eliminarla. Reduce la dependencia de Recordar este dispositivo en esos entornos.

Para cualquier cosa que no esté cubierta aquí, escribe al soporte indicando: versión de WordPress, versión de PHP, plugins activos, el mensaje de error exacto y una descripción corta de los pasos que llevan al problema.

Last updated on