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.