JWT: ¿qué es y cómo funciona?
Por FelipePublicado en:
Un JWT (JSON Web Token) es un estándar abierto, recogido en el documento RFC 7519, que permite intercambiar información de forma segura entre un cliente y un servidor mediante un token firmado. Funciona incluyendo dentro del propio token todos los datos necesarios para la autenticación, de modo que el servidor puede validarlo sin consultar una base de datos externa en cada petición.
Qué es un JWT (JSON Web Token)
Para identificar y autenticar a los usuarios en internet se han utilizado tradicionalmente las cookies. Sin embargo, este sistema resulta limitado cuando necesitas mayor flexibilidad y un control más fino sobre la información que viaja entre las partes. El JWT nace precisamente para cubrir esa necesidad: ofrece personalización y versatilidad a la hora de autenticar usuarios, manteniendo en todo momento un entorno de máxima seguridad para los datos.
Un JSON Web Token es un sistema estandarizado que permite el intercambio seguro de datos entre cliente y servidor, o entre dos dispositivos cualesquiera. La clave está en que el token contiene en su interior toda la información necesaria para la autenticación, por lo que no hace falta consultar a una base de datos externa durante el proceso. Este estándar se encuentra recogido dentro del documento RFC 7519, lo que garantiza que cualquier lenguaje o plataforma pueda implementarlo de la misma forma.
Cuando se produce una transmisión de información mediante JWT, el usuario es ajeno al proceso: se limita a introducir sus credenciales de acceso, ya que todo ocurre de forma interna entre el cliente y el servidor. Esa transparencia es una de las razones por las que se ha convertido en uno de los formatos de token de seguridad más extendidos en aplicaciones web y API modernas.
Cómo está formado un JWT: cabecera, payload y firma
Un JWT se divide en tres partes, todas ellas codificadas en base64url y separadas por un punto. Esta estructura compacta permite enviarlo cómodamente en una cabecera HTTP, en una URL o dentro de una petición. Veamos cada bloque en detalle.
1. Cabecera (header)
La cabecera contiene información importante como el tipo de token y el algoritmo de firma o cifrado utilizado. Entre los métodos más habituales se encuentran HS256 (HMAC con SHA-256) y RS256 (firma RSA con SHA-256). En todos los casos, la función hash SHA-256 se emplea para generar una huella única del contenido, de manera que cualquier alteración resulte detectable.
2. Payload (carga útil)
En el payload se incluye la información que se transmite en la transferencia, indicando qué datos se envían y cómo se realiza el intercambio. Para ello se utilizan los llamados claims, que pueden ser de tres tipos: registrados (campos estándar como la fecha de expiración o el emisor), públicos (definidos libremente pero de uso común) y privados (acordados entre las partes que comparten el token). Conviene recordar que el payload va codificado, no cifrado, por lo que no debes incluir en él contraseñas ni datos sensibles si no añades una capa de cifrado.
3. Firma
Para firmar el JWT se utiliza el método declarado en la cabecera, combinando la cabecera, el payload y una clave secreta. La firma es la que garantiza que el token no ha sido manipulado y que procede de un emisor legítimo. Si alguien modifica un solo carácter del contenido, la firma deja de ser válida y el servidor rechaza el token.
Niveles de seguridad: cuándo firmar y cuándo cifrar
No todos los JWT necesitan el mismo grado de protección. El estándar contempla varios niveles según la sensibilidad de los datos:
Sin firma. No se firma el JWT cuando la información no requiere un alto nivel de protección, por tratarse de datos que no son sensibles ni críticos. Es la opción menos habitual en producción.
Firma JWS (JSON Web Signature). Se emplea el esquema JSON Web Signature para garantizar que el mensaje no ha sufrido modificaciones durante su transferencia y que procede del remitente correcto. Es el uso más extendido, ya que aporta integridad y autenticidad.
Firma (JWS) y cifrado (JWE). Es el máximo nivel de seguridad: tras firmar el token, su contenido se encripta mediante el esquema JSON Web Encryption con una contraseña común o una clave privada que el destinatario debe conocer para descifrarlo. Así, además de garantizar la integridad, se protege la confidencialidad de los datos.
Cómo funciona la autenticación basada en JWT paso a paso
El flujo de una autenticación con JWT es sencillo de seguir y explica por qué resulta tan eficiente:
1. En primer lugar, el usuario introduce sus credenciales de acceso, por ejemplo el correo y la contraseña.
2. El servidor verifica que esas credenciales son correctas y devuelve un token firmado.
3. El cliente guarda ese token firmado, normalmente en el almacenamiento local, en el almacenamiento de sesión o incluso en una cookie.
4. El resto de peticiones que el cliente realiza al servidor incluyen ese token.
5. El servidor decodifica el token y verifica su firma para comprobar que es válido.
6. Cuando el usuario se desconecta, el token se destruye, de modo que en posteriores inicios de sesión se generará un token completamente distinto. En este proceso de destrucción no interviene el servidor.
Gracias a este mecanismo, el servidor no necesita guardar el estado de la sesión: le basta con firmar el token al principio y verificarlo en cada petición posterior. Es habitual acompañar este flujo con una fecha de expiración corta y un refresh token que permita renovar el acceso sin pedir de nuevo las credenciales.
Ventajas de usar JWT
Los tokens JWT ofrecen varias ventajas cuando se utilizan en procesos de autenticación. Estas son las principales:
Autenticación sin estado (stateless)
Los JWT permiten una autenticación sin estado: cada token es autónomo y contiene por sí mismo todos los datos necesarios para ser validado, además de información del propio usuario. El servidor solo se encarga de firmar el token y reenviarlo al cliente para, posteriormente, verificarlo cada vez que se realiza una petición. Esto simplifica la escalabilidad, porque cualquier servidor de tu infraestructura puede validar el token sin compartir una sesión central.
Capacidad para guardar cualquier metadato
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 almacenan las credenciales. Puedes incluir roles, permisos o preferencias del usuario y leerlos directamente del token.
Rapidez y rendimiento
El uso de JWT es más rápido y permite alcanzar un mayor rendimiento, ya que el servidor se limita a firmar el token y a verificarlo en cada petición. Como el token ya incluye la información del usuario y otros metadatos, no es necesario perder tiempo realizando búsquedas adicionales en la base de datos, como sí sucede con las cookies tradicionales.
JWT y el alojamiento de tu aplicación
Implementar JWT correctamente depende también del entorno donde se ejecuta tu aplicación. Lenguajes como PHP, Node.js o Python disponen de librerías maduras para firmar y verificar tokens, pero necesitan un servidor con versiones actualizadas y buen rendimiento para resolver las operaciones criptográficas sin penalizar el tiempo de respuesta. Contar con un alojamiento web con discos NVMe, tecnología LiteSpeed y certificado SSL incluido te ayuda a desplegar API basadas en JWT de forma rápida y segura, ya que el cifrado HTTPS protege el token mientras viaja entre el cliente y el servidor.
Preguntas frecuentes
¿Es seguro guardar datos en un JWT?
El payload de un JWT va codificado en base64url, no cifrado, por lo que cualquiera que intercepte el token puede leer su contenido. Resulta seguro para verificar la identidad gracias a la firma, pero no debes incluir contraseñas ni datos sensibles salvo que añadas cifrado JWE y transmitas siempre el token bajo HTTPS.
¿En qué se diferencia un JWT de una cookie de sesión?
Una cookie de sesión obliga al servidor a guardar el estado y a comprobar dónde está almacenada la sesión en cada petición. Un JWT es autónomo: lleva la información dentro y el servidor solo verifica su firma, lo que facilita la escalabilidad y mejora el rendimiento en aplicaciones distribuidas.
¿Cuándo conviene usar JWT?
JWT resulta especialmente útil en API REST, aplicaciones de página única (SPA), arquitecturas de microservicios y sistemas de inicio de sesión único, donde interesa autenticar peticiones sin mantener sesiones en el servidor. Para webs sencillas con sesiones tradicionales, las cookies pueden seguir siendo suficientes.
Hosting en España con soporte real en español, migración gratis, SSL incluido y 30 días de garantía. Sin líos y sin costes ocultos.
Ver planes de hosting →
