Product Craft Bible
Magic Link & Passwordless
Inicio Auth y Permisos Magic Link & Passwordless
Auth y Permisos

Magic Link & Passwordless

8 reglas FIDO Alliance "Passkeys" (53% adopción, 22%, Google 4x, Amazon 6x) · passkeys.devScalekit "OTP vs Magic Links" · Authress "Magic links passwordless" (PKCE rompe multi-device)WCAG 2.2 SC 1.3.5 Identify Input Purpose · Twilio "OTP input forms" · Cloud Four "One-time passcode inputs" · MDNOWASP MFA Cheat Sheet (SMS restricted: SS7, SIM-swap) · FIDO Alliance · Verizon DBIR (77%)
104

Magic Link & Passwordless

8 reglas
948

Ofrece passkeys como método primario; magic links y OTP como segundo escalon

Los passkeys (WebAuthn/FIDO2) son la autenticación sin contrasena más segura disponible: usan criptografia de clave publica donde la clave privada nunca sale del dispositivo. Magic links y OTP por email o SMS son alternativas validas para bajo riesgo, pero dependen de la seguridad del buzon o del canal de mensajeria. En apps con datos sensibles, pagos o acceso empresarial, el passkey debe ser el botón prominente y los demas métodos, un enlace secundario, no opciones del mismo peso. FIDO reporta 53% de adopción de passkeys en al menos una cuenta y mejoras medibles de Google (4x en tasa de exito de login) y Amazon (6x más rápido).

FIDO Alliance "Passkeys" (53% adopción, 22%, Google 4x, Amazon 6x) · passkeys.dev
Preferir
Inicia sesión
Usa tu huella o Face ID en este dispositivo
Prefiero un código por email
Evitar
Inicia sesión
Te enviaremos un enlace magico
Enviar enlace magico
Solo email, sin mención de passkeys: el método más seguro ni aparece
949

Resuelve el problema "link en otro dispositivo" incluyendo siempre un código OTP en el mismo email

El fallo más frecuente del magic link ocurre cuando el usuario pide el enlace en su laptop pero abre el correo en el telefono: la sesión queda autenticada en el lugar equivocado. Los clientes de correo embebidos (apps de Gmail u Outlook) abren el link en un navegador interno que no comparte cookies con el navegador principal, rompiendo el flujo; cerrar el loop con PKCE evita MITM pero rompe el multi-dispositivo. El problema es estructural y no tiene solución elegante solo con el link. La solución correcta es incluir siempre un código de 6 digitos debajo del enlace, para que el usuario complete el login sin cambiar de dispositivo.

Scalekit "OTP vs Magic Links" · Authress "Magic links passwordless" (PKCE rompe multi-device)
Preferir
Acme · Inicia sesión
Haz clic para entrar
Entrar a tu cuenta
O escribe este código
483 201
Valido por 10 minutos
Evitar
Acme · Inicia sesión
Haz clic para entrar
Entrar a tu cuenta
Solo link: si lo abres en otro dispositivo, la sesión entra donde no debe
950

Usa un solo input de OTP con autocomplete one-time-code, no seis cajas separadas

Dividir el código en seis cajas de un caracter es popular pero tecnicamente deficiente: los lectores de pantalla no navegan entre ellas de forma coherente, no se puede pegar el código completo de un gesto y el autofill nativo falla. Un campo único con inputmode="numeric", autocomplete="one-time-code" y un aria-label descriptivo cumple WCAG 1.3.5 (Identify Input Purpose, AA) y habilita el autofill de SMS en iOS y Android. Usa type="text" y no type="number": el numérico agrega flechas de incremento y rompe el formato.

WCAG 2.2 SC 1.3.5 Identify Input Purpose · Twilio "OTP input forms" · Cloud Four "One-time passcode inputs" · MDN
Preferir
Código de verificación
Del SMS · tocar para autocompletar
type="text" inputmode="numeric" autocomplete="one-time-code"
Evitar
Código de verificación
4
8
3
2
0
1
6 inputs: no se pega, no dispara autofill, inaccesible con lector de pantalla
951

Comunica que los passkeys resisten phishing; no presentes el SMS OTP como equivalente

Los passkeys son resistentes al phishing porque el par de claves esta ligado criptograficamente al dominio del servicio: ni el usuario ni el atacante pueden usar la credencial en un sitio falso. El SMS OTP, en cambio, se intercepta vía SIM swap, ataques SS7 o ingenieria social donde se convence al usuario de dictar el código; por eso OWASP clasifica el SMS como autenticador "restringido". No presentes ambos métodos con el mismo peso visual y el mismo nivel de confianza: comunica la ventaja del passkey con un badge claro y evita la falsa equivalencia. El 77% de las brechas por hacking involucran credenciales robadas (Verizon).

OWASP MFA Cheat Sheet (SMS restricted: SS7, SIM-swap) · FIDO Alliance · Verizon DBIR (77%)
Preferir
Passkey
La clave nunca sale de este dispositivo
Resiste phishing
Código por SMS
Respaldo · vulnerable a SIM swap
Restringido
Evitar
Passkey
Seguro
Código por SMS
Seguro
952

Diseña la recuperación de cuenta antes de quitar la contrasena, con códigos de un solo uso al registrar

Cuando el usuario pierde acceso a su passkey o deja de recibir emails/SMS, la recuperación es el momento más critico del flujo passwordless: una mala recuperación obliga a soporte humano, genera abandono o abre una puerta trasera insegura. La estrategia debe definirse antes de lanzar, no después. Genera y muestra códigos de recuperación de un solo uso en el momento del registro del passkey, igual que los gestores de contrasenas y las apps 2FA, y nunca dejes el fallback de SMS/email como única vía. Tu cuenta es tan segura como su método de autenticación más débil.

Authsignal "Passkey Recovery & Fallback" (criterio) · Passkey Central "End-user education"
Preferir
Guarda tus códigos de recuperación
Usalos para entrar si pierdes tu dispositivo. Cada código sirve una sola vez.
7F2K-9QXP
3MBV-1LZT
8WRC-4DNH
5GYJ-2PFA
Copiar
Descargar
Evitar
Dispositivo perdido = cuenta inaccesible
Passkey como única opción, sin códigos de recuperación ni flujo alternativo. El usuario queda fuera y solo le queda soporte.
953

En la pantalla de espera di exactamente que se envio, a donde y cuanto dura

Tras pedir un magic link o un OTP, el usuario queda esperando sin saber que buscar en su bandeja. Un mensaje vago como "Revisa tu correo" genera incertidumbre; el copy efectivo específica el canal exacto (email o telefono), los últimos digitos enmascarados del destino, que acción tomar y cuanto tiempo tiene. Anade un botón de reenvio con cuenta regresiva visible para que el usuario no quede atrapado si el mensaje no llega, y un atajo para usar el código en lugar del link. El contexto de entrega y la urgencia temporal son los dos factores que más reducen la fricción en este paso.

NN/g "Passwordless Accounts: OTPs and Passkeys" · NN/g "Transactional and confirmation email"
Preferir
Revisa tu correo
Enviamos un código de 6 digitos a ale••••@gmail.com. Caduca en 10 minutos.
Reenviar en 0:47
Usar código en su lugar
Evitar
Email enviado
Toast genérico que se va en 3 s: ni a donde, ni que código, ni cuanto dura
954

Marca el proposito del input con label visible, aria-label y inputmode numérico

El campo de OTP necesita un proposito programaticamente determinable: una label visible "Código", un aria-label descriptivo y los atributos inputmode="numeric" y autocomplete="one-time-code". Esto cumple WCAG 2.2 SC 1.3.5 (Identify Input Purpose, AA), que exige que el proposito de los campos que recogen información del usuario pueda determinarse por software, y permite el autofill nativo de SMS en dispositivos compatibles. Sin esto, el lector de pantalla solo anuncia "campo de texto" y el usuario no sabe que escribir. El teclado numérico en móvil reduce errores y acelera la captura.

WCAG 2.2 SC 1.3.5 Identify Input Purpose (AA) · AccessiTree "Identify input purpose" · MDN inputmode
Preferir
El lector anuncia "Código de verificación de 6 digitos"
1
2
3
4
5
6
Evitar
Sin label, sin aria-label, type="number" con flechas: lector anuncia solo "campo de texto"
955

Nunca atrapes al usuario: ofrece siempre un escape hatch visible a otra vía de acceso

Un sistema passwordless que depende de un único canal (solo email, solo SMS, solo passkey) atrapa al usuario si ese canal falla: los emails llegan tarde o van a spam, el telefono se queda sin batería, el passkey puede no estar sincronizado. El principio de "no atrapar" exige que toda pantalla de autenticación muestre al menos una vía alternativa visible, no enterrada en un enlace de soporte, y preferentemente de un canal diferente al primario. NN/g recomienda ofrecer passwordless por defecto pero permitir al usuario adjuntar una contrasena después si lo prefiere. Los fallbacks deben existir, monitorearse y nunca ser la vía por defecto.

NN/g "Passwordless Accounts" · Authsignal "Passkey Recovery & Fallback" (criterio)
Preferir
Entrar con passkey
Toca tu huella o Face ID
o usa otro método
Código por email
Código por SMS
Evitar
Toca tu sensor para entrar
Sin ninguna salida: si el sensor falla, el usuario debe buscar soporte