¿Cómo almacenar el token de acceso / token de restablecimiento de contraseña en la base de datos?

4

Tengo un código de acceso que se envía a los usuarios para que puedan acceder al sitio con un solo clic. Desde los términos de acceso es muy similar a la URL de restablecimiento de contraseña, así que asumo que se aplican las mismas suposiciones.

Por ejemplo, en esta pregunta personas sugiera hacer un hash de este tipo de token que suene razonable, pero el problema es: si uso bcrypt, ¿cómo lo almaceno para que pueda volver a consultarlo o asegurar la exclusividad durante la generación? No veo otra manera, aparte de revisar cada token en la base de datos.

¿Eso significa que bcrypt no se puede usar para ese propósito o me falta algo?

    
pregunta Ilya Chernomordik 10.05.2016 - 15:49
fuente

2 respuestas

7

Como sabe que sus tokens de texto simple son únicos (o al menos esto es una inferencia lógica) no necesita sal. La intención de la sal es únicamente proporcionar una singularidad de hash en el caso de contraseñas idénticas, pero como su espacio de entrada está destinado a ser único, no tiene este problema.

Además, ya que tienes control sobre la aleatoriedad y el tamaño de los textos, no necesitas preocuparte por que las contraseñas más débiles se descifren a través de medios tradicionales, por lo que bcrypt no es realmente necesario para ralentizar el proceso. Si su espacio de entrada es grande y aleatorio, solo puede hacer un hash con un hash criptográfico fuerte (por ejemplo, SHA256) sin sal. Esto le permite simplemente verificar si H(token) está en la base de datos al generar un nuevo token (verificación de exclusividad).

El proceso para validar una solicitud de reinicio es bastante simple: tome la ID de usuario y el token de texto sin formato (como se proporciona en el enlace de reinicio) y verifique que coincidan en la base de datos computando H(token) nuevamente.

De forma alternativa, si aún desea utilizar bcrypt, puede asegurar la exclusividad al anteponer el token aleatorio con el ID de usuario antes de pasarlo por bcrypt. Esto no requiere que verifique la singularidad (siempre será único debido al prefijo de ID) y aún así le permite verificar el token sin problemas.

    
respondido por el Polynomial 10.05.2016 - 15:57
fuente
3

Puedes usar bCrypt. La solución simple es enviar a su usuario una identificación y el token:

https://example.com/pwdReset?resetId=123&resetKey=[your long randomly generated key]

Puedes buscar el hash utilizando el ID (como si usaras el nombre de usuario para buscar el hash de la contraseña del usuario).

    
respondido por el Jacco 10.05.2016 - 15:57
fuente

Lea otras preguntas en las etiquetas