Previniendo ataques de repetición con JWT

4

Actualmente estoy creando una API REST que se usará para una aplicación web y móvil. La autenticación a la API se realizará utilizando Tokens web JSON .

Al usar JWT, podemos usar el reclamo exp para que expire el token después de un tiempo específico. Esto, combinado con la reclamación jti es útil para evitar ataques de reproducción, y algo que se integrará en nuestra aplicación. Sin embargo, para comodidad del usuario, no queremos seguir pidiéndoles que inicien sesión con cada solicitud o después de intervalos cortos de 30 minutos.

Por lo tanto, estoy pensando en la siguiente situación:

  • El usuario inicia sesión con su dirección de correo electrónico y contraseña
  • El servidor devuelve un JWT con una caducidad en 1 hora
  • El cliente realiza otra solicitud a la API, pasando el JWT en el encabezado
  • Si el JWT es válido, la API devuelve los datos solicitados y otro JWT, que nuevamente caduca en 1 hora

Si el cliente no realiza más solicitudes dentro del tiempo de vencimiento de 1 hora asignado, una solicitud posterior le pedirá que vuelva a iniciar sesión.

Mi pregunta: ¿es esta la mejor solución de intercambio entre usabilidad y prevención de ataques de repetición?

    
pregunta BenM 27.11.2017 - 17:14
fuente

1 respuesta

2

Creo que necesitas separar tus preocupaciones. Proteger el JWT en el lado del cliente es el trabajo de la aplicación que usa el JWT, no la API. Si esta línea está borrosa, es posible que tenga que volver a diseñar su aplicación, ya que probablemente sea más monolítico, en lugar del servicio.

JTI, EXP y IAT están diseñados más para brindarle las herramientas para mitigar un ataque si se ha comprometido. TLS se utiliza para evitar que el JWT se detenga mientras está en tránsito. Acortar la ventana para la EXP limitará la exposición del token único, pero en última instancia, si obtuvieron el token a través de la aplicación, el EXP está silenciado, solo tomarán el token siguiente.

    
respondido por el Shane Andrie 27.11.2017 - 18:21
fuente

Lea otras preguntas en las etiquetas