Visión
Imagino un sistema de inicio de sesión / registro, donde el usuario ingresa su correo electrónico y recibe un correo electrónico con un enlace para iniciar sesión. El usuario hace clic en el enlace y se registra automáticamente (confirma la dirección de correo electrónico en el proceso).
Esto sería una forma de autenticación sin contraseña.
Problema
El problema que veo con este enfoque es que un enlace enviará una solicitud GET, pero esta solicitud cambiará el estado de la sesión del usuario (activándola).
Las solicitudes GET deberían (según el estándar HTTP) nunca tener efectos secundarios. Esto es algo que los exploradores también asumen, lo que significa que podrían obtener solicitudes GET para optimizar el rendimiento / la experiencia del usuario.
Supongamos que está utilizando Gmail en el navegador. ¿Podría suceder que el navegador obtenga el enlace en el correo electrónico?
Sería un gran problema de seguridad si simplemente abrir el correo electrónico fuera suficiente para iniciar sesión en el sitio.
Lo que he considerado
Uso de JavaScript en la página de destino para enviar una solicitud POST
Mi corazonada me dice que, aunque HTML / CSS / JavaScript de un enlace podría ser recuperado previamente, ninguno de este código (especialmente el JavaScript) se ejecutará antes de que el navegador abra explícitamente el enlace.
Esto debería significar que si la sesión de usuario se activa de alguna manera utilizando JavaScript (enviando una solicitud POST al backend), debería ser seguro usar una solicitud GET para llegar a esta página (como un enlace en el correo electrónico).
¿Estoy en lo cierto al asumir esto?
¿Es una mala práctica hacerlo de esta manera?
Usando un formulario HTML en el cuerpo del correo electrónico
Otra opción sería colocar un formulario en el correo electrónico, lo que permitiría una solicitud POST directamente desde el correo electrónico.
Sin embargo, parece que varios clientes de correo electrónico bloquearán los envíos de formularios dentro de los correos electrónicos. Los clientes de correo electrónico que permiten el envío de formularios tienden a advertir al usuario de que el correo electrónico es probablemente malicioso. Parece que esta no es realmente una buena solución.