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!
Deja una respuesta
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *