¿Debería almacenarse el token JWT en una cookie, encabezado o cuerpo?

5

¿Cuál es la forma más segura de almacenar la transferencia y almacenar un token JWT, o cualquier token de autenticación en general?

Alguien me dijo que es seguro enviar el token de autenticación como una cookie, pero no entiendo cómo esto proporcionaría seguridad adicional con solo usar una cookie de identificación de sesión simple para la autenticación, ya que el navegador incluiría esa cookie para todos solicitudes salientes de todos modos. ¿He entendido mal algo?

Lo que tiene mucho más sentido para mí, es si el token se almacenaría en un encabezado o cuerpo de respuesta, luego se extraería en el lado del cliente mediante programación y se agregaría manualmente a cada solicitud. No habría manera de interceptar el token a través de la conexión HTTPS y los ataques CSRF se vuelven imposibles (yo usaría el token CSRF de todos modos). Por supuesto, a la token de autenticación todavía se puede acceder mediante un ataque XSS, pero ¿no es la cookie también propensa a este ataque?

No entiendo cómo el token en una cookie proporciona CUALQUIER seguridad adicional sobre la autenticación basada en una cookie de identificación de sesión simple. ¿Me falta alguna información?

    
pregunta Tuomas Toivonen 20.07.2016 - 19:34
fuente

3 respuestas

5

Al poner el token en la cookie y configurar esa cookie HttpOnly, puede evitar el acceso a la cookie mediante un script del lado del cliente malintencionado (es decir, XSS); no hay acceso a una cookie HttpOnly desde JavaScript, el navegador la protegerá y manejar el envío de la cookie solo al origen correcto.

enlace

    
respondido por el crovers 20.07.2016 - 20:49
fuente
2

Bien, comencemos por entender qué es JWT (citado en su sitio web):

  Los

JSON Web Tokens son un método RFC 7519 estándar abierto de la industria para   representando reclamos de forma segura entre dos partes.

     

JWT.IO le permite decodificar, verificar y generar JWT.

El objetivo de JWT no es ocultar datos, sino demostrar su identidad al servidor. Cualquiera puede decodificar el token, pero no pueden crear tokens falsos porque eso requiere la clave secreta. El servidor lanzará una excepción cuando intente descifrar un token falso, ya que nadie conoce su clave privada (¡espero!).

Generalmente, el token se envía en el encabezado de Autorización, que se parece a esto:

Authorization: Bearer <the token>

Y luego tienes muchas bibliotecas que analizarán el encabezado y extraerán la información necesaria para ti, dependiendo de tu idioma.

    
respondido por el Tom 20.07.2016 - 20:46
fuente
1

Como dijeron los cazadores, no puedes acceder a las cookies de HttpOnly con javascript.

  

No entiendo cómo el token en una cookie proporciona CUALQUIER seguridad adicional sobre la autenticación basada en una cookie de identificación de sesión simple. ¿Me falta alguna información?

No lo hace. El punto de JWT no es ser más seguro que el ID de sesión. La ventaja de JWT es que no necesita almacenar nada del lado del servidor. Con el ID de sesión, debe almacenar las sesiones en algún lugar, mientras que con JWT los datos de la sesión se almacenan dentro de JWT.

    
respondido por el FINDarkside 14.06.2018 - 14:00
fuente

Lea otras preguntas en las etiquetas