Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

¿Qué es un JWT?

8/20
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Traduccion resumida de sobre JWT.

  • JSON Web Token (JWT)

Es un estándar abierto (RFC 7519) que define una forma compacta y autónoma de transmitir información de forma segura entre partes como un objeto JSON. Esta información se puede verificar y confiar porque está firmada digitalmente. Los JWT se pueden firmar usando una palabra secreta (con el algoritmo HMAC) o un par de claves públicas / privadas usando RSA o ECDSA.

  • ¿Cuándo deberíamos utilizar JSON Web Tokens?

Autorización: este es el escenario más común para usar JWT. Una vez que el usuario haya iniciado sesión, cada solicitud posterior incluirá el JWT, lo que le permitirá acceder a rutas, servicios y recursos que están autorizados con ese token. El inicio de sesión único es una función que se utiliza ampliamente con JWT en la actualidad, debido a su pequeña sobrecarga y su capacidad para usarse fácilmente en diferentes dominios o servidores distribuidos.

Intercambio de información: los JWT son una buena forma de transmitir información de forma segura entre varias partes. Debido a que los JWT se pueden firmar, por ejemplo, utilizando pares de claves públicas / privadas, se puede estar seguro de que los remitentes son quienes dicen ser. Además, como la firma se calcula utilizando las cabeceras y el payload, también se puede verificar que el contenido no haya sido manipulado.

Btw, si te has preguntado qué es payload o no lo tienes muy claro te explicaré brevemente lo que es:
En CS, payload (o carga útil) significa al menos dos cosas.

  1. La parte de los datos que lleva el mensaje. Esto deja de lado la metadata que puede venir de la cabecera (headers).
  2. En seguridad informática o pentesting, payload también hace referencia a datos; sin embargo, éstos son la parte del programa malware que explota las vulnerabilidades de un sistema (exploits).

Te dejo esta referencia si quieres darle seguimiento.

Si quieres saber más de JWT, recomiendo ir a la documentación oficial

JWT permite comprobar, esa comprobación nos da un token, una llave para poder acceder a la sesión.

Antes se tenía una sesión que se transmitía por medio de una cookie al backend, y el backend guardaba la sesión en memoria o a veces la guardaba en la BD.

Una cookie tiene información adentro, por medio de ella se generaba la sesión, se envía al backend y el backend la comprobaba. El problema de esto es cuando se quiere escalar hacia más clientes o al hacer una distribución de la API.

Por ejemplo, antes había problema cuando se deseaba hacer un sistema distribuido, un balanceo de cargas en diferentes maquinas, es decir, correr la API en diferentes nodos a través del mundo ya que la sesión se mantenía en la maquina donde se había establecido la conexión. Al conectarse a otra maquina, la sesión se perdía.

Un ventaja de JWT es que son stateless, es decir, no se guardan en memoria y en base de datos. Literal, es un token ya encriptado que contiene la información de cómo identificar al usuario y los permisos, por lo tanto ya no hay necesidad de guardar la sesión en la maquina y el token va a permitir hacer esas comprobaciones, y con ello es posible hacer distribución de los sistemas, hacer un sistema que esté clusterizado.

Las ventajas de JWT es que permite soportar diferentes clientes, que sea stateless y poder hacer un sistema distribuido.

Página oficial de JWT: https://jwt.io/

Un JWT tiene tres partes, cada parte va dividida por un punto:

  • Header → Dice el algoritmo de encriptación y el tipo (usualmente no se modifica).
  • Payload → Viene la información que vamos a encerrar en el token. Viene el sub (el sujeto, dueño del token, permite identificar al usuario), después la información que queremos añadir incluida la fecha en que se generó el token (iat).
  • Verify Signature → Una forma para verificar el token, combina el header y payload, y se firma con una palabra clave (llave secreta). Solo el que tenga esa llave puede verificar si el token es original, si es verificado. Solo el backend debe tener ella llave, él mismo genera y verifica con esa llave.

Ejemplo:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```![va1.png](https://static.platzi.com/media/user_upload/va1-526b09cd-bbae-4c0f-b706-7334f622169a.jpg)