token JWT de un solo uso con reclamación de ID de JWT

6

Estoy intentando averiguar cómo emitir un token JWT de un solo uso para la función de restablecimiento de contraseña y aún así mantenerlo sin estado. Encontré Tokens de uso único con JWT , lo que básicamente sugiere incluir el hash de la contraseña actual, que a su vez se invalida una vez que la contraseña se cambia con éxito.

No me siento cómodo incluyendo el hash de contraseña en JWT, así que investigué un poco y encontré ID de JWT especificación pero eso requiere almacenar el ID en algún lugar para poder verificar la validación del token.

Entonces, mi pregunta es, ¿cuáles son los problemas de seguridad si incluyo el hash de contraseña actual en el token de enlace de restablecimiento de contraseña que se envía por correo electrónico?

¿Es mejor usar un ID de JWT y agregarlo como una columna en algún lugar de la base de datos en lugar de usar la contraseña?

    
pregunta norbertpy 13.03.2017 - 20:51
fuente

1 respuesta

7

Dudo en rodar mi propia seguridad, pero solo por el gusto de hacerlo aquí es una idea.

En lugar de incluir el hash de contraseña, siga este proceso cuando genere el JWT:

  1. Obtener el hash de contraseña
  2. Obtenga una clave secreta del lado del servidor (la entropía de 256 bits debería hacerlo)
  3. Calcular una fecha y hora de caducidad, digamos una hora a partir de la hora actual
  4. Crea un nuevo hash sobre 1 + 2 + 3
  5. Incluya el hash y la marca de tiempo de caducidad en el JWT

Para validar una solicitud de restablecimiento de contraseña:

  1. Obtener el hash de contraseña
  2. Obtenga la clave secreta del lado del servidor
  3. Lea (y verifique) la fecha y hora de caducidad del JWT
  4. Calcular un hash nuevo sobre 1 + 2 +3
  5. Compare con el hash en el JWT

De esta manera, no expone el hash de la contraseña, y no puede forzarse de manera bruta sin la clave secreta (lo que llevaría millones de años). Y también impiden que el hash se reutilice incrustando la marca de tiempo en él.

    
respondido por el John Wu 14.03.2017 - 00:38
fuente

Lea otras preguntas en las etiquetas