JWT: ¿qué es y cómo funciona?

Por Felipe

Publicado en:

Para identificar y autenticar a los usuarios en internet se utilizan habitualmente las cookies, aunque este sistema es algo limitado cuando se necesita un mayor grado de flexibilidad. En este punto aparece JWT, un nuevo estándar que permite una mayor personalización y versatilidad a la hora de autenticar a usuarios, a la vez que realiza todo el proceso bajo un entorno de máxima seguridad de los datos.

 

Qué es JWT

Un JWT (JSON Web Token) es un sistema estandarizado que permite el intercambio seguro de datos entre cliente y servidor, o dos dispositivos. En este token se incluye toda la información necesaria para la autenticación por lo que no es necesario consultar a una base de datos externa durante el proceso.

JWT token es un estándar que se encuentra recogido dentro del documento RFC 7519. Cuando se produce una transmisión de información con JWT se transmiten los datos junto con la identidad y claims (claves) del usuario de forma segura, pudiendo verificarse la misma al estar firmada digitalmente.

 

Para qué sirve y cómo usarlos de manera segura

Los JWT son utilizados de forma habitual en procesos de autentificación de usuarios, ya que es posible cifrar mensajes cortos y añadirles información sobre el remitente, para que el receptor pueda verificar su autenticidad y confiar en ellos.

El usuario es ajeno al proceso de JWT authentication, limitándose a introducir sus credenciales de acceso, ya que todo el proceso se produce de forma interna del lado del cliente y el servidor.

 

Qué rates tiene un JSON Web Token

Un JWT se divide en tres partes, todas ellas bajo una codificación en base64 y separadas con un punto.

1. Header

El header o cabecera contiene información importante como el tipo de token o el algoritmo de firma y el cifrado de datos utilizado. Entre los métodos de cifrado que se suelen utilizar están el HS256, SHA-256 o el SHA-256.

2. Payload

En este campo del token se incluye la información que se transmite en la transferencia. Se incluye información sobre el tipo de datos que se transmiten y cómo se realiza la transferencia, utilizando para ello claims de tres tipos, registrados, públicos o privados.

3. Firma

Para firmar el JWT Token se utiliza el método de firma o cifrado elegido, junto a codificación base 64 del header y el payload. Esta firma se basa en el estándar RFC 7515, utilizando una clave que solo es conocida por el emisor o aplicación original. La firma comprueba la integridad del mensaje durante todo el proceso de envío y garantiza que llegue al destinatario correcto.

La firma puede utilizar tres modos diferentes:

  • Sin protección. No se firma el JWT si la información no necesita un alto nivel de protección por tratarse de datos que no son sensibles o importantes.
  • Firma JWS. Se utiliza el esquema JSON Web Signature para garantizar que el mensaje no ha sufrido modificaciones en durante su transferencia, y que proceda del remitente correcto.
  • Firma (JWS) y cifrado (JWE). El máximo nivel de seguridad donde tras la firma se encripta el contenido con una contraseña común o clave privada, que debe ser conocida para proceder a su descifrado por parte del destinatario.

 

Cómo funciona una autenticación basada en JWT

Veamos paso a paso cómo funciona un sistema de autenticación basada en JWT:

  • En primer lugar, el usuario introduce sus credenciales de acceso.
  • El servidor verifica que esas credenciales son correctas y devuelve el token firmado.
  • El cliente guarda ese token firmado (en almacenamiento local, almacenamiento de la sesión o incluso en una cookie).
  • El resto de peticiones que realiza el cliente al servidor incluyen ese token.
  • El servidor decodifica el token para verificar su validez.
  • Cuando el usuario se desconecta el token es destruido, por lo que en posteriores inicios de sesión se generará un token totalmente distinto. En este proceso de destrucción no interviene el servidor.

 

Cuáles son las ventajas de los JWT

Los tokens JWT ofrecen diversas ventajas cuando se utilizan en procesos de autenticación, siendo las principales.

 

Stateless

Los JWT permiten una autenticación sin estado, es decir, cada token es autónomo y contiene por sí mismo todos los datos necesarios para ser validados, así como información del propio usuario. El servidor solo se encarga de firmar el token y reenviarlos al cliente, para posteriormente verificarlo cada vez que se realice una petición.

 

Cualquier tipo de metadatos

Con un token se puede guardar cualquier tipo de metadato siempre que se trate de JSON válido, algo que no ocurre con los sistemas de autenticación basados en cookies que solo pueden guardar las credenciales.

 

Rapidez y rendimiento

El uso de JWT en sistemas de autenticación es mucho más rápido y permite alcanzar un mayor rendimiento pues el servidor solo firma el token y luego lo verifica en cada petición que realiza el cliente.

Además, el token incluye información de usuario y otros metadatos por lo que no es necesario perder tiempo realizando otros tipos de búsqueda como ocurre con las cookies.

 

JWT es el formato más popular de token de seguridad, que se encuentra en formato JSON y cuentan con codificación base64 para poder ser utilizados a través de HTTP para su uso en sistemas de autenticación por redes e internet.