Programación

JWT: JSON Web Token, qué son y cómo usarlos

Los JWT o JSON Web Token, se han convertido en un método popular para intercambio de información. En este artículo exploraremos qué son, cuándo usarlos, su estructura, funcionamiento y ventajas. ¡Vamos a ello!

Qué son los JWT: JSON Web Token

JWT o JSON Web Token es un estándar del documento RFC 7519 que define una manera compacta de transmisión de información, o «claims», mediante objetos JSON.

Los claims son parejas de clave/valor representados por JWS (JSON Web Signature) o JWE (JSON Web Encryption), estos son verificables, ya que están firmados digitalmente, o bien con el algoritmo HMAC (Hash-based Message Authentication Code) o bien con un par de llaves pública/privada RSA (Rivest-Shamir-Adleman) o ECDSA (Elliptic Curve Digital Signature Algorithm).

Esta verificación asegura que el contenido del token no ha sido alterado y que la identidad del emisor es confiable.

Cuándo usar JSON Web Token

Los JWT son muy útiles para las siguientes situaciones:

Autenticaciones y autorizaciones

Es el uso más popular del JWT. Cuando un usuario inicia sesión, se devuelve un JSON Web Token. Este token servirá de llave para acceder a los recursos, rutas o servicios que estén permitidos para esa llave.

Intercambio de información

Como he mencionado antes, los JWT se pueden firmar, esto asegura al receptor de que el emisor es quien dice ser y que la información no ha sido alterada. Por esto, el JSON Web Token se usa como acreditación para el intercambio de información.

Estructura de JWT: JSON Web Token

Un JSON Web Token tiene tres partes, separadas por puntos. Estas partes son Header, Payload y Signature. El Header consiste de dos partes. La primera es el tipo de token, en este caso JWT, y la segunda es el tipo de algoritmo de firma. Este es un ejemplo de header:

{
  "alg": "HS256",
  "typ": "JWT"
}

El Payload contiene los claims. Aquí estarán establecidos los datos del usuario, los privilegios y la información que el usuario quiera añadir. Un ejemplo:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

Por último está el signature, esta es la firma que permite verificar si el token es válido o no.

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Una vez tenemos esto, se encripta para generar el JSON Web Token. Podrás hacerlo en la página oficial de JWT. Metemos ahí los datos y obtenemos el token.

La mayoría de lenguajes de programación tienen librerías que gestionan los JWT y nos ahorran todo este trabajo. Puedes encontrar las librerías y características de cada una en la documentación oficial.

Cómo funcionan los JWT: JSON Web Token

Cuando el usuario inicia sesión, el servidor crea un JWT con su información y lo firma. Este token se envía al cliente en el cuerpo de la respuesta HTTP o en una cookie. El cliente almacena este token para utilizarlo en sus solicitudes como «bearer» en el encabezado HTTP Authorization. Cuando se hace una solicitud al servidor, este verifica el JSON Web Token usando la firma. Si esta firma es válida y el token no ha caducado el servidor procede con la solicitud.

Ventajas de usar JWT

Estas son algunas de las ventajas de usar JWT:

  • Compacto: Al estar codificados en Base64, los JWT son compactos y pueden ser enviados a través de URL, parámetros POST o en los encabezados HTTP.
  • Autónomos: El payload tiene toda la información necesaria sobre el usuario, lo que reduce la necesidad de consultas adicionales a la base de datos.
  • Firmados: Al estar firmados, la integridad y autenticidad de los datos están aseguradas.

Desventajas de usar JWT

  • Seguridad: Los Token deben ser manejados con cuidado. Si una clave secreta se ve comprometida, puede derivar en graves problemas de seguridad.
  • Tamaño: A pesar de que los JWT están diseñados para ser compactos, pueden llegar a ser considerablemente pesados si tienen un gran volumen de claims.

Buenas prácticas

  • Almacenamiento: Asegúrate de almacenar los token en cookies HTTP-only, para prevenir el acceso mediante JavaScript. Así reducirás el riesgo de ataques XSS.
  • Usa HTTPS: Para evitar que el token sea interceptado en la transmisión, usa HTTPS para la comunicación entre servidor y cliente.
  • Caducidad: Establece un tiempo de caducidad razonable.
  • Información sensible: No almacenes información sensible en los JSON Web Token.
  • Tamaño: Intenta mantener el tamaño del token por debajo de los 8KB, ya que algunos servidores no aceptan headers más pesados que esto.
  • Verificar antes de leer: Valida el token antes de leer su información, esto incluye comprobar su caducidad, el emisor, el algoritmo y la firma.

Recapitulando

Ahora ya sabes qué son y como funcionan los JWT: JSON Web Token. Hemos visto que son muy útiles para la transmisión de información, y tiene aplicaciones interesantes como la implementación de un sistema de login. ¿Te animas a implementarlos? ¡Cuéntanos en comentarios! ¿Quieres saber más sobre seguridad? Aquí te dejo un artículo sobre CORS, ¡Échale un vistazo!

Irune Guinea

Compartir
Publicado por
Irune Guinea

Entradas recientes

Expresiones en After Effects

Aprende a utilizar las expresiones en after effects para realizar videos de forma más rápida… Leer más

3 días hace

Tipos de bases de datos: Cuáles existen, cuándo usarlos y ejemplos

¿Vas a empezar un proyecto y no sabes que base de datos elegir? Entra y… Leer más

6 días hace

Qué es la autoridad de dominio

¿Qué es la autoridad de un dominio y como puedo mejorar mi calificación? En este… Leer más

1 semana hace

Códigos de estado HTTP: ¿Cuáles son?

Es posible que te hayas encontrado con algún aviso de códigos de errores al navegar… Leer más

2 semanas hace

Guía Inspiradora para Mejorar las Métricas de Core Web Vitals

Las brechas en la optimización del rendimiento de un sitio web tienen un efecto devastador… Leer más

3 semanas hace

Progressive Web Apps: ¿Qué son las PWA?

PWA: ¿Qué son las Progressive Web Apps? Te contamos las características, ventajas y usos de… Leer más

4 semanas hace