problema de tamaño de tokens JWT

1

Estoy desarrollando una aplicación de una sola página que interactúa con un servicio basado en oAuth. Este servicio otorga tokens JWT (actualización y acceso) para una gran cantidad de recursos. Potencialmente, el número de fichas puede estar en cualquier lugar entre 2 y 100.

Mi pregunta es: ¿dónde debo guardar esos tokens?

  • Las cookies tienen un límite de tamaño de 4KB, y cada token es aproximadamente 1KB, por lo que no es necesario.
  • El almacenamiento de la sesión resuelve ese problema pero está expuesto a XSS y no persistirá si el usuario abre una nueva pestaña de mi aplicación.

¿Hay una mejor práctica aquí? ¿Hay alguna forma de utilizar el almacenamiento de sesión pero mantenerlo más seguro de alguna manera?

    
pregunta Nir Smadar 07.12.2016 - 11:30
fuente

1 respuesta

2

El primer pensamiento es que parece que hay bastantes tokens y plantea la pregunta de si es realmente un requisito para que el servidor de autorización emita tantos tokens específicos o si menos tokens con una aplicabilidad más amplia podrían suficiente.

Sin embargo, centrándose en su pregunta ...

Además de sessionStorage , también hay localStorage que abordaría el problema de compartir entre varias pestañas.

Como señala correctamente, el almacenamiento entre cookies y el almacenamiento web presenta diferentes desafíos de seguridad, uno de ellos es que el almacenamiento web es vulnerable a XSS mientras que una cookie solo de HTTP no lo es. Sin embargo, una cookie solo de HTTP utilizada para la autenticación es vulnerable a CSRF porque se incluye automáticamente en el navegador, mientras que un token almacenado en el almacenamiento web no lo es.

Al final del día, elegir el almacenamiento correcto es elegir los pros y los contras que mejor se ajusten a su escenario específico. Para obtener una mejor idea sobre el impacto de sus opciones, verifique esta respuesta en StackOverflow . Cubre los pros y los contras de las siguientes opciones:

  • Opción 1: almacenamiento web (localStorage o sessionStorage)
  • Opción 2: cookie solo HTTP
  • Opción 3: cookie accesible a Javascript ignorada por el lado del servidor

Para los que no siguen enlaces, incluyo la parte de conclusiones en línea:

  

Mi recomendación para los escenarios más comunes sería ir con la Opción 1 , principalmente porque:

     
  • Si crea una aplicación web, necesita tratar con XSS; siempre, independientemente de donde almacenes tus tokens
  •   
  • Si no utiliza la autenticación basada en cookies, CSRF no debería aparecer en su radar, por lo que es una cosa menos de qué preocuparse
  •   

También tenga en cuenta que las opciones basadas en cookies también son bastante diferentes, ya que las cookies de la Opción 3 se usan únicamente como un mecanismo de almacenamiento, por lo que es casi como si fuera un detalle de implementación del lado del cliente. Sin embargo, la Opción 2 significa una forma más tradicional de tratar con la autenticación; para leer más sobre este tema de las cookies frente al token, puede encontrar este artículo interesante: Cookies vs Tokens: lo definitivo Guía .

     

Finalmente, ninguna de las opciones lo menciona, pero el uso de HTTPS es obligatorio, por supuesto, lo que significaría que las cookies deberían crearse adecuadamente para tener eso en cuenta.

    
respondido por el João Angelo 07.12.2016 - 16:44
fuente

Lea otras preguntas en las etiquetas