Es un tema común. Su escenario # 1 es una optimización de almacenamiento sobre el escenario # 2. En el # 2, debe generar y almacenar un servidor de valores aleatorios. Esto le brinda todo el control que pueda desear, pero requiere una columna adicional en su base de datos, o algo así. El escenario descarga este requisito de almacenamiento del lado del cliente. Dado que no se puede confiar en el cliente, debe agregar al enlace una verificación de integridad, es decir, un MAC ; el cifrado no es necesario porque no hay nada en el enlace de restablecimiento que deba mantener en secreto para el usuario (el usuario ya sabe su nombre y cuando solicitó un restablecimiento de la contraseña), pero desea evitar que un cliente malintencionado cree un falso restablecer enlace, de ahí el MAC.
Por lo tanto, el contenido del token, en el escenario # 1, debe incluir todos los datos que necesita para hacer cumplir su política de restablecimiento de contraseña, pero decidió no almacenar en el servidor; esto significa el nombre de usuario y una marca de tiempo (hora a la que se activó el proceso de restablecimiento de la contraseña o el tiempo de caducidad). Es posible que desee incluir un hash de la contraseña anterior en la entrada del MAC (no necesariamente en el token) si desea evitar que el usuario reutilice el enlace de restablecimiento varias veces.
Calcular y verificar un MAC no requerirá muchos recursos, probablemente un poco menos que generar un token aleatorio y almacenarlo en una base de datos (el acceso a la base de datos será considerablemente más costoso que la criptografía). Sin embargo, lo más probable es que este efecto sea insignificante de todos modos (las bases de datos son rápidas). Una desventaja del escenario # 1 es que necesita mantener una clave secreta en el servidor, compartida entre los front-end (si tiene varios), resistente a los reinicios (así que no solo una clave en la RAM, a menos que esté listo para invalidar todos los enlaces de restablecimiento de contraseña cuando el servidor se reinicia), y, por supuesto, a salvo de los espías.
El token aleatorio (escenario # 2) es probablemente más fácil o, si lo prefiere, es más difícil equivocarse . Lo cual es una razón suficiente para recomendarlo.