Hash la clave de firma de un token de autenticación en la base de datos

0

Tengo clientes que son todos los navegadores. Todos los clientes renderizan una sola aplicación de página obteniendo datos de una API web. El diseño de la API sigue los principios de REST.

Uso la autenticación basada en token sin OAuth porque no tengo terceros para mi API y quiero sentir cómo la seguridad puede dañar mi cerebro ;-)

El formato de mi token que emito es Json Web Token (JWT): contiene el ID de usuario, el tiempo de vida (fecha de exp), el emisor y la clave de firma (alg: HS256, que es SHA-256 hash algo)

El token es válido por 7 días. Así que el usuario tiene que volver a autenticarse cada 7 días. (Quizás esa no sea todavía la solución final en este campo ...)

Este es mi flujo de autenticación:

1) Utilizo la autenticación básica sobre SSL para mi punto final de inicio de sesión

2) Si el nombre de usuario y la contraseña enviados por el usuario son válidos, puse un token en la respuesta

3) Este token se almacena en el almacenamiento local / de sesión en el lado del cliente

4) Cada solicitud adicional a un punto final de recurso de la API del servidor debe incluir un token válido; de lo contrario, la solicitud obtiene un 401 y vuelve a ver la vista de inicio de sesión.

5) Antes de realizar una investigación adicional con el token como para verificar su fecha de vencimiento, necesito saber si la autenticidad del token sigue siendo válida o si un usuario legítimo lo ha modificado. Esto supone que el token se firmó con una clave antes de lo que llamamos MAC (Código de autenticación de mensaje)

Valido el token con la misma clave de firma que el token se firmó durante la creación del token. Almaceno la clave de firma que es un grupo de números generados aleatoriamente en la tabla sql de usuario que pertenece a userId. El ID de usuario que obtengo del token se ve arriba. O mejor dicho, almaceno el hash de la clave (matriz de bytes) en la tabla de usuario hash con BCrypt.

Pregunta :

  • ¿Hay algo mal que hago?

  • ¿Debo almacenar el token completo en la base de datos en lugar de solo la clave de firma y cuál es la ventaja?

pregunta Elisa 09.02.2014 - 22:56
fuente

1 respuesta

1

En su primer punto, hay algunas desventajas potenciales y puntos para usar la autenticación básica sobre SSL que podría considerar.

  • Cuando esté usando autenticación básica, es posible que su solución basada en token no sea realmente necesaria, ya que una vez que el navegador haya enviado las credenciales de autenticación básicas en primer lugar, las enviará nuevamente con cada solicitud a ese dominio, por lo que podría simplemente revísalos nuevamente y no te preocupes por el token :)
  • La autenticación básica envía las credenciales del usuario en formato codificado a través del enlace, cualquier persona que pueda ver los datos en tránsito puede obtenerlos. Ahora, SSL, por supuesto, proporcionará cierta protección, pero aún conlleva un poco de riesgo, en algunos escenarios. Es posible que desee consultar autenticación de resumen si mantiene este esquema de autenticación
  • Por sí mismo, la autenticación básica no incluye algunas protecciones de autenticación que podrían dejar su aplicación abierta al ataque. Por ejemplo, no hay un bloqueo de cuenta, ningún requisito de calidad de contraseña, ninguna funcionalidad de cierre de sesión, ninguna función de cambio de contraseña y ninguna protección contra el usuario que tiene múltiples inicios de sesión simultáneos.
respondido por el Rоry McCune 10.02.2014 - 08:42
fuente

Lea otras preguntas en las etiquetas