Saltar al contenido

¿Almacenar token de autenticación en cookie o encabezado?

Este escrito ha sido probado por nuestros expertos para que tengas la seguridad de la exactitud de esta sección.

Solución:

Autenticación basada en cookies

ventajas

  1. Bandera de HttpOnly: Las cookies de sesión se pueden crear con el Sólo Http indicador que protege las cookies de JavaScript malicioso (XSS-Cross-Site Scripting).

  2. bandera segura: Las cookies de sesión se pueden crear con Seguro bandera que impide la transmisión de cookies por un canal no encriptado.

Contras

  1. CSRF: Las cookies son vulnerables/susceptibles a los ataques CSRF ya que las cookies de terceros se envían de forma predeterminada al dominio de terceros que provoca la explotación de la vulnerabilidad CSRF.

  2. Rendimiento y escalabilidad: La autenticación basada en cookies es una autenticación con estado de modo que el servidor tiene que almacenar las cookies en un archivo/base de datos para mantener el estado de todos los usuarios. A medida que aumenta la base de usuarios, el servidor backend tiene que mantener un sistema separado para almacenar cookies de sesión.

Autenticación basada en token:

ventajas

  1. Rendimiento y escalabilidad: los tokens contienen los metadatos y su valor firmado (para protección contra manipulaciones). Ellos son autónomo y por lo tanto no hay necesidad de mantener el estado en el servidor. Esto mejora el rendimiento y, por lo tanto, la escalabilidad cuando se requiere la expansión.

  2. CSRF: A diferencia de la autenticación basada en cookies, la autenticación basada en tokens no es susceptible de falsificación de solicitudes entre sitios, ya que los tokens no se envían a aplicaciones web de terceros de manera predeterminada.

Contras

  1. XSS: Dado que los tokens de sesión se almacenan en el almacenamiento de datos local del navegador y son accesibles para el JS del mismo dominio. Por lo tanto, no hay opción para proteger el identificador de sesión de los ataques XSS, a diferencia del indicador de seguridad HTTPOnly que está disponible en la autenticación basada en cookies.

Conclusión

Ambos mecanismos tienen sus propios pros y contras como se mencionó. En la era actual de Marcos de desarrollo de aplicaciones, las desventajas como XSS y CSRF están a cargo del propio marco subyacente y, por lo tanto, creo que es sin duda una clara compensación en la que los desarrolladores y las partes interesadas toman la decisión.

La respuesta aceptada es combinar la autenticación basada en sesión, donde una sesión se mantiene en la base de datos de back-end y tiene estado con cookies, que son un mecanismo de transporte y, por lo tanto, los pros y los contras son defectuosos.

En cuanto a si un token de autenticación debe almacenarse en una cookie o en un encabezado, eso depende del cliente. Si el cliente es otra API REST, entonces tiene sentido pasarlo a través del encabezado.

Si el cliente es un navegador, pudo almacene el token en el almacenamiento local/de sesión y luego envíe el token a través del encabezado (como dice la respuesta aceptada), pero como mencionó, esto tiene vulnerabilidades y no se recomienda (vea más sobre esto aquí: https://auth0.com /docs/security/store-tokens).

Si el cliente es un SPA, puede almacenar los tokens en la memoria, lo que probablemente sea la opción más segura, pero luego necesitará recuperar nuevos tokens entre páginas.

Si necesita persistencia entre páginas, “la forma antigua” puede seguir siendo la mejor opción, siempre que sus cookies sean solo http, seguras y haya implementado la protección csrf (aunque pronto esto puede no ser necesario debido a que el mismo sitio propiedad). Siempre que implemente la protección csrf, obtendrá todos los beneficios de la “autenticación basada en token sin cookies” y protección adicional contra XSS.

Te mostramos las comentarios y valoraciones de los usuarios

Acuérdate de que tienes autorización de parafrasear tu experiencia si acertaste tu enigma .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *