paint-brush
Uso de cookies de sesión vs. JWT para autenticaciónpor@shreyaghate
37,441 lecturas
37,441 lecturas

Uso de cookies de sesión vs. JWT para autenticación

por Shreya Ghate4m2020/06/08
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Uso de cookies de sesión vs. JWT para autenticación, podemos usar sesiones o tokens. Este blog lo ayudará a comprender la diferencia entre los dos métodos de autenticación utilizados para la autenticación de usuarios. En la autenticación basada en token, usamos JWT (JWT) para la autenticación. Cuando el cliente recibe un token, significa que el usuario está autenticado para realizar cualquier actividad utilizando el cliente. Cuando el usuario cierra la sesión, los datos de esa sesión se eliminan de la base de datos y de la memoria del servidor. Cuando una gran cantidad de usuarios acceden a la aplicación una vez, esto puede ser un problema cuando el servidor usa la memoria de la sesión para almacenar datos de usuario.
featured image - Uso de cookies de sesión vs. JWT para autenticación
Shreya Ghate HackerNoon profile picture

HTTP es un protocolo sin estado y se utiliza para transmitir datos. Permite la comunicación entre el lado del cliente y el lado del servidor. Originalmente se estableció para crear una conexión entre los navegadores web y los servidores web.

Entendamos esto con la ayuda de un ejemplo:

Supongamos que estamos comprando en línea, agregamos algunos artículos, por ejemplo. auriculares a nuestro carrito. Luego procedemos a buscar otros artículos, durante este tiempo, queremos que el estado de los artículos del carrito se almacene y no se pierda mientras se realizan otras tareas. Esto quiere decir que queremos que nuestros estados sean recordados durante toda la operación de compra.

Dado que HTTP es un protocolo sin estado, para superar esto, podemos usar sesiones o tokens. Este blog lo ayudará a comprender la diferencia entre los dos métodos de autenticación utilizados para la autenticación de usuarios.

Entonces, profundicemos en los conceptos de autenticación basada en sesión (cookie) y token, además de comprender la estructura de los tokens web JSON, es decir, JWT.

Autenticación basada en sesión

Antes de la aparición de JSON Web Tokens, usábamos predominantemente este tipo de autenticación.

En este tipo de método de autenticación, el servidor es responsable de la autenticación y el cliente no sabe qué sucede en el lado del servidor después de enviar una solicitud.

Entonces, ¿qué son las cookies de sesión?

La cookie creada anteriormente es una cookie de sesión : se elimina cuando el cliente se apaga, porque no especificó una directiva Expires o Max-Age. Sin embargo, los navegadores web pueden usar la restauración de sesión , lo que hace que la mayoría de las cookies de sesión sean permanentes, como si el navegador nunca se hubiera cerrado.

Leer más sobre las cookies HTTP

Comprendamos qué sucede normalmente cuando un usuario inicia sesión en cualquier sitio web en el navegador web. Por ejemplo, el usuario inicia sesión, el servidor creará una sesión para el usuario y almacenará los datos de la sesión en la memoria del servidor.

Se crea un ID de sesión que se almacena en una cookie en el navegador del cliente mientras el usuario realiza determinada actividad en el sitio web. En cada solicitud que realiza el usuario, se envía una cookie junto con ella.

Luego, el servidor puede verificar los datos de la sesión en la cookie con los datos de la sesión almacenados en la memoria del servidor cuando el usuario inició sesión inicialmente. Cuando el usuario cierra sesión en el sitio web, los datos de esa sesión se eliminan de la base de datos y de la memoria del servidor.

Autenticación basada en token

En la autenticación basada en token, usamos JWT (JSON Web Tokens) para la autenticación. Este es el método ampliamente utilizado para las API RESTful.

Aquí, cuando el usuario envía una solicitud de autenticación de usuario con los detalles de inicio de sesión, el servidor crea un token cifrado en forma de JSON Web Token (JWT) y lo devuelve al cliente. Cuando el cliente recibe un token, significa que el usuario está autenticado para realizar cualquier actividad utilizando el cliente.

El JWT se almacena en el lado del cliente, generalmente en localStorage, y se envía como una clave única de ese usuario cuando el usuario solicita datos del servidor o realiza alguna actividad para ese sitio web. Entonces, cuando el servidor recibe la solicitud, valida el JWT para cada solicitud de que es solo ese usuario en particular y luego envía la respuesta requerida al cliente.

Así es como se envía el encabezado junto con cada solicitud al servidor:

 headers: { "Authorization" : "Bearer ${JWT_TOKEN}" }

El estado del usuario se almacena en el JWT en el lado del cliente. Cuando el usuario cierra la sesión, el token se elimina del lado del cliente (almacenamiento local). Por lo tanto, la mayoría de los datos se almacenan en el lado del cliente y se accede a ellos directamente en lugar de enviar solicitudes al servidor.

JSON Web Tokens consta de tres partes concatenadas por puntos (.):

  1. Encabezamiento
  2. Carga útil
  3. Firma

Estructura JWT:

 xxxxx.yyyyy.zzzzz

La salida contiene tres cadenas de URL Base64 separadas por puntos que se pueden pasar fácilmente en entornos HTML y HTTP, mientras que son más compactas en comparación con los estándares basados en XML, como SAML.

JWT que tiene el encabezado anterior y la carga útil codificados, y está firmado con un secreto como se muestra en la siguiente imagen.

Leer más sobre JWT

Estructura de un JWT:

¿Cuál es mejor usar?

En las aplicaciones web modernas, los JWT se utilizan ampliamente, ya que se escalan mejor que los basados en cookies de sesión porque los tokens se almacenan en el lado del cliente mientras que la sesión utiliza la memoria del servidor para almacenar los datos del usuario, y esto podría ser un problema cuando un gran número de usuarios están accediendo a la aplicación a la vez. Dado que JWT se envía junto con cada solicitud y contiene toda la información del usuario, aunque esté codificada, es necesario usar la información necesaria en JWT y la información confidencial debe evitarse o puede cifrarse para evitar ataques de seguridad.

No hay un método fijo para usar en todo momento, depende del desarrollador y el tipo de requisitos para determinar cuál debe usarse para qué escenario. Por ejemplo, OAuth usa un token de portador específico y un token de actualización de mayor duración para obtener el token de portador. Es mejor usar un híbrido de ambos tipos para crear flexibilidad y una aplicación robusta.

Espero que este artículo le brinde una buena comprensión de los dos tipos de autenticación ampliamente utilizados.

Para cualquier duda o sugerencia, comentar. :D