Autenticación con enlace mágico
Aprende a implementar enlaces mágicos para inicios de sesión sin contraseña, registro por invitación y invitaciones a miembros de organizaciones usando tokens de un solo uso.
¿Qué es un enlace mágico?
Un enlace mágico es un método de autenticación sin contraseña donde un usuario recibe una URL de inicio de sesión de un solo uso por correo electrónico (o SMS). Al hacer clic en el enlace, se inicia sesión sin requerir una contraseña.
Estas son algunas características clave de seguridad de los enlaces mágicos:
- Token de un solo uso: Una vez que se hace clic, el token se invalida para evitar su reutilización.
- Expiración del enlace: El enlace mágico debería tener un tiempo de expiración corto (por ejemplo, 10 minutos) para mayor seguridad.
- Limitación de tasa: Evitar abusos limitando cuántos enlaces mágicos se pueden enviar en un periodo de tiempo específico.
- Vinculación a dispositivo/navegador (Opcional): Restringir el uso del enlace al dispositivo o IP original para prevenir intercepciones.
Composición de un enlace mágico
Un enlace mágico consiste en:
- La ruta de la URL: Apunta a la página de destino de tu aplicación.
- Token de un solo uso: Un token único y de consumo único utilizado para la autenticación sin contraseña.
- Correo electrónico del usuario: Utilizado para validar la autenticidad del token y la identidad del usuario.
- Parámetros adicionales: Opcionales, dependiendo de las necesidades de tu aplicación.
Por ejemplo, un enlace mágico podría tener este aspecto:
Para crear un enlace mágico, necesitas generar un token de un solo uso, enviarlo de manera segura al usuario y luego validarlo cuando el usuario haga clic en el enlace.
Flujo de trabajo de un enlace mágico
- El usuario solicita un enlace mágico: El usuario introduce su correo electrónico en tu aplicación.
- Generación del token de un solo uso: El servidor genera un token y lo envía como enlace vía email.
- El usuario hace clic en el enlace: El usuario hace clic en el enlace en el email.
- Validación del token: El servidor verifica si el token es válido.
- El usuario es autenticado: Si el token es válido, el usuario inicia sesión.
¿Cómo implementar enlaces mágicos con Logto?
Paso 1: Solicitar token de un solo uso
Utiliza la API de gestión de Logto para crear un token de un solo uso.
Ejemplo de carga útil del cuerpo de la solicitud:
Paso 2: Componer tu enlace mágico
Después de obtener el token de un solo uso, puedes componer un enlace mágico y enviarlo a la dirección de correo electrónico del usuario final. El enlace mágico debería al menos contener el token y el correo electrónico del usuario como parámetros, y debería navegar a una página de destino en tu propia aplicación. Por ejemplo: https://yourapp.com/landing-page
.
Aquí hay un ejemplo simple de cómo podría verse el enlace mágico:
Nota:
Los nombres de los parámetros en el enlace mágico pueden ser completamente personalizados. Puedes agregar información adicional al enlace mágico basado en los requisitos de tu aplicación, así como codificar todos los parámetros de la URL.
Paso 3: Activar el flujo de autenticación mediante Logto SDK
Después de que el usuario final haga clic en el enlace mágico y navegue a tu aplicación, puedes extraer los parámetros token
y email
de la URL, y luego llamar a la función signIn()
del SDK de Logto para activar el flujo de autenticación.
Para más detalles, consulta los Docs de Logto - Enlace Mágico (Token de un solo uso).
Casos de uso del enlace mágico
Los enlaces mágicos pueden reemplazar el paso de autenticación de primer factor, pero no pueden omitir la autenticación multifactor (MFA).
En Logto, al generar un enlace mágico con un token de un solo uso, no necesitas especificar si es para inicio de sesión o registro. Determinamos automáticamente el flujo basado en el estado de registro del correo electrónico:
- Correo electrónico no registrado: Al hacer clic en el enlace mágico, se redirige a los usuarios al flujo de creación de cuenta, omitiendo la entrada y verificación del correo electrónico. Los usuarios proceden a establecer una contraseña, agregar detalles de perfil (por ejemplo, nombre completo) o configurar el MFA, basado en tus configuraciones de registro.
- Correo electrónico registrado: Al hacer clic en el enlace mágico, se omite la verificación del primer paso (p. ej., "correo electrónico + contraseña" o "correo electrónico + código de verificación"). El usuario inicia sesión directamente o se le pide que complete el MFA, basado en tus configuraciones de inicio de sesión.
Logto admite los siguientes escenarios con enlaces mágicos:
- Registro solo por invitación: Para herramientas internas o productos de IA en fase de prueba, puedes deshabilitar el registro público e invitar a usuarios específicos a través de un enlace mágico.
- Invitación a miembros de la organización: Para productos SaaS, utiliza enlaces mágicos para invitar a nuevos miembros a una organización, facilitando el proceso de membresía.
- Inicio de sesión/Registro: Envía un enlace mágico para iniciar sesión o registrarse a través del correo electrónico.
Actualmente no es compatible:
- Restablecimiento de contraseña con enlace mágico.
- Uso de número de teléfono o nombre de usuario como identificador.
Déjanos saber si necesitas una personalización adicional.
Registro solo por invitación con enlace mágico
Para nuevos productos (por ejemplo, herramientas de IA) en pruebas internas o para herramientas internas, es posible que desees desactivar el registro público y permitir solo a usuarios específicos acceder a tu aplicación. Para implementar esto con Logto:
-
Ve a Consola > Experiencia de inicio de sesión > Inicio de sesión y registro > Opciones avanzadas, y desactiva "**Habilitar registro de usuario" para cerrar el registro público.
-
Recoge las direcciones de correo electrónico de los usuarios que deseas invitar (por ejemplo, a través de tu sitio web o recomendaciones de usuarios existentes).
-
Crea y envía el enlace de invitación mágica como se describe arriba (solicita el token de un solo uso, compón el enlace mágico, activa la autenticación a través del SDK de Logto).
Nota: Establece un tiempo de expiración para el enlace de invitación. Se recomienda hacer el enlace válido por al menos un día. Usa el siguiente cuerpo de solicitud para generar el token de un solo uso:
-
Envía el enlace mágico al correo electrónico del usuario (por ejemplo,
https://yourapp.com/landing-page?type=registrationInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]
). Personaliza la plantilla de correo electrónico, como:Cuando los usuarios hagan clic en "Aceptar la invitación", se registrarán automáticamente en tu servicio, incluso con el registro público deshabilitado. Esto se conoce como "Invitación a usuario objetivo".
Invitación a miembros de la organización con enlace mágico
Para productos multi-inquilino (por ejemplo, aplicaciones SaaS como Slack, GitHub, Vercel), proporciona un proceso de invitación de miembros sin problemas para gestionar las membresías organizacionales. Usa enlaces mágicos para tasas de conversión más altas en invitaciones de miembros.
-
Sigue los Docs de Logto para implementar la creación de organizaciones, control de acceso basado en roles de organización y gestión de organizaciones: Organizaciones de Logto.
-
Configura el flujo de trabajo "Invitar miembros" en tu producto. Ejemplo:
-
Sigue esta guía para Invitar a Miembros de la Organización. Nota: Al invitar a miembros, asegúrate de que la carga de la solicitud incluya:
context: jitOrganizationIds
para especificar qué organización(es) se unirá el usuario.- Establece un tiempo de
expiresIn
más largo (por ejemplo, 2 días o 1 semana) para permitir tiempo suficiente a los usuarios para aceptar la invitación.
Ejemplo de carga de solicitud:
-
Envía el enlace de invitación al correo electrónico del usuario (por ejemplo,
https://yourapp.com/landing-page?type=organizationMemberInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected]
). Personaliza tu plantilla de correo electrónico, por ejemplo:Cuando los usuarios hagan clic en "Aceptar la invitación", se registrarán o iniciarán sesión automáticamente y se unirán a la organización.
Manejar conflictos de cuenta
¿Qué sucede si un usuario ya tiene sesión iniciada y hace clic en otro enlace mágico?
Para manejar correctamente los conflictos de cuenta, asegúrate de lo siguiente:
- Evita agregar
login
en el "prompt de inicio de sesión": No configures el prompt de inicio de sesión incluyendo ellogin
en él. Si se configura incorrectamente, Logto iniciará sesión automáticamente en la cuenta asociada con el token del enlace mágico, omitiendo el prompt de cambio de cuenta. - Preserva los tokens existentes: Al llamar a la función
signIn()
, especifica el parámetroclearTokens: false
para evitar borrar los tokens existentes. Si se usa esta opción, asegúrate de borrar manualmente los tokens en la página de callback de inicio de sesión.
Después de una configuración adecuada, la experiencia del usuario será la siguiente:
- Enlace mágico para la cuenta actual: Si el usuario ya tiene sesión iniciada y hace clic en un enlace mágico para la misma cuenta, Logto verificará el token de un solo uso y provisionará al usuario a las organizaciones especificadas si es necesario.
- Enlace mágico para una cuenta diferente: Si el usuario tiene sesión iniciada y hace clic en un enlace mágico para una cuenta diferente, Logto pedirá al usuario que:
- Continúe como la nueva cuenta: Logto cambiará a la nueva cuenta después de la verificación del token.
- Quedarse con la cuenta actual: Logto omite la verificación del token y devuelve al usuario a la cuenta actual.
Manejar páginas de error para enlace mágico inválido
Cuando los usuarios hagan clic en un enlace mágico inválido, serán redirigidos a una página de error con una explicación clara del problema. A continuación se muestran los posibles escenarios de error y sus mensajes:
Nombre | Descripción |
---|---|
token_not_found | Token activo no encontrado con el correo electrónico y el token dados. |
email_mismatch | Discrepancia del correo electrónico con el token dado. |
token_expired | El token ha expirado. |
token_consumed | El token ha sido consumido. |
token_revoked | El token ha sido revocado. |
cannot_reactivate_token | No se puede reactivar el token. |
Cada página de error proporcionará un mensaje específico, ayudando a los usuarios a entender la razón detrás del enlace mágico inválido y guiándolos en los próximos pasos. Por ejemplo:
Conclusión
Logto ofrece seguridad a nivel empresarial a través de flujos de inicio de sesión sin contraseña y flexibles usando enlaces mágicos. Es una forma simple pero poderosa de crear experiencias de usuario fluidas, ya sea invitando a usuarios a unirse a una organización, permitiéndoles crear cuentas sin esfuerzo o proporcionando una autenticación sin complicaciones. Y debido a que Logto maneja situaciones complicadas como conflictos de cuenta y tokens expirados, tus usuarios obtienen un proceso seguro y sin frustraciones cada vez.
¿Listo para modernizar tu gestión de identidad y acceso con autenticación a prueba de balas?