He implementado un servicio de Contraseña Olvidada de la siguiente manera:
- El usuario va a la página de inicio de sesión, hace clic en "¿Olvidó la contraseña?"
- El usuario recibe un formulario que solicita su dirección de correo electrónico.
- El correo electrónico se envía a la dirección dada si está en la base de datos, con un enlace que contiene una cadena (supuestamente) única, generada aleatoriamente, que también se almacena en la base de datos junto con el tiempo solicitado, lo que permite un límite de tiempo para se establecerá en el enlace (que es)
- El usuario hace clic en el enlace, se valida y luego se le solicita que proporcione una nueva contraseña.
Eso es bastante estándar, (aunque podría cambiar algunos aspectos de la misma), pero me hizo pensar: dado que las contraseñas buenas se proporcionan / se recuerdan con poca frecuencia, ¿por qué no prescindir totalmente de la contraseña y utilizar el sistema Olvidé mi contraseña?
- El usuario va a la página de inicio de sesión, completa la dirección de correo electrónico (¿o quizás un nombre de usuario para estar más seguro?)
- El correo electrónico se envía con un enlace. El enlace tiene un límite de tiempo muy corto (< 5 minutos) de validez.
- El usuario hace clic en el enlace, están en.
En ambos escenarios, la seguridad del correo electrónico del usuario, ya sea detectada o interrumpida, es la amenaza común, pero en el segundo escenario:
- El enlace es válido por un tiempo mucho más corto.
- También es probable que se use más rápido (cualquier tipo de correo electrónico de validación se puede dejar solo, pero si definitivamente quiere iniciar sesión ahora va a usar ese enlace cuando lo reciba).
- El usuario no puede proporcionar una contraseña de mala calidad.
- El usuario solo tiene que recordar una contraseña.
- Una sola cuenta no se puede compartir entre varias personas (a menos que compartan una dirección de correo electrónico).
- Un ataque automatizado debe ingresar al sistema de correo electrónico y esperar un correo electrónico, lo que probablemente sea más largo que la espera para que la contraseña no se elimine, es decir, mejor que bcrypt.
Me pregunto cuáles son las desventajas? Puedo ver:
- Irritación del usuario, tal vez por tener que esperar un correo electrónico o iniciar sesión en su correo electrónico también
- Es probable que abra una nueva ventana del navegador, lo que puede ser irritante si desea organizar pestañas
- Un usuario podría darse cuenta de que tiene que proteger su cuenta de correo electrónico con una mejor contraseña, cambiarla y luego bloquearse :-)
Es solo un pensamiento.
Gracias a todos los que dieron una respuesta, hay algunos puntos realmente interesantes (y definitivamente válidos) que realmente me han hecho pensar y me han dado más áreas para investigar. D.W. obtiene el tick debido al enlace provisto que brinda mayor información sobre este tipo particular de situación, pero realmente aprecio todas las respuestas dadas.