¿Qué es un JWT?
Un JSON Web Token (JWT) es una cadena compacta y segura para URL que sirve para transmitir información entre dos partes. Los encontrarás en cabeceras de autorización, en cookies y en parámetros de consulta de prácticamente cualquier aplicación web moderna. Tienen el aspecto de tres cadenas codificadas en Base64 unidas por puntos:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTcxNTAwMDAwMH0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Eso es todo: tres partes separadas por puntos.
Las tres partes
**Parte 1: la cabecera** El primer segmento se decodifica en un objeto JSON que describe el tipo de token y el algoritmo de firma:
{"alg": "HS256", "typ": "JWT"}
Algoritmos habituales: HS256 (HMAC-SHA256, clave simétrica), RS256 (RSA, asimétrico) y ES256 (ECDSA). El algoritmo le dice a quien verifica cómo comprobar la firma.
**Parte 2: el contenido** El contenido es la parte más útil. Lleva las llamadas afirmaciones: pares de clave y valor que dicen algo sobre la persona usuaria o sobre la sesión:
{"sub": "user_123", "email": "user@example.com", "role": "admin", "iat": 1714000000, "exp": 1715000000}
sub: el sujeto (normalmente un identificador de usuario)iat: fecha de emisión (timestamp Unix)exp: fecha de caducidad (timestamp Unix), la más importante de comprobariss: quién emitió el tokenaud: qué servicio debería aceptarlo
**Parte 3: la firma** La firma la calcula el servidor que emite el token con una clave secreta o una clave privada. Sin esa clave no puedes crear una firma válida, pero sí puedes leer la cabecera y el contenido igualmente.
Por qué puedes leer un JWT sin tener la clave
Los JWT están codificados en Base64url, no cifrados. La cabecera y el contenido solo están codificados, no protegidos frente a la lectura. La firma únicamente impide la *manipulación*, no oculta lo que hay dentro. Es un malentendido muy extendido: **nunca guardes datos sensibles (contraseñas, información de pago) en el contenido de un JWT**. Cualquiera que tenga la cadena del token puede decodificarla y leerla.
Cómo decodificar un JWT en segundos
Pega cualquier JWT en el decodificador de NoxaKit. Separa el token en sus tres partes, decodifica cada segmento, da formato al JSON y convierte las marcas iat y exp en fechas legibles, para que veas al momento cuándo se emitió y cuándo caduca.
Útil para depurar fallos de autenticación, comprobar qué afirmaciones envía tu servidor, verificar la caducidad de un token e inspeccionar tokens de terceros durante una integración.
Lista de comprobación de seguridad al trabajar con JWT
1. **Comprueba exp lo primero**: los tokens caducados se rechazan de inmediato
2. **Verifica iss y aud**: un token de un servicio no debería aceptarlo otro distinto
3. **No aceptes nunca alg: none**: algunas bibliotecas aceptaron históricamente tokens sin firmar
4. **Usa caducidades cortas**: de 15 a 60 minutos para los tokens de acceso, con tokens de refresco para sesiones más largas
5. **Guarda los tokens donde toca**: las cookies httpOnly protegen mejor frente a XSS que el almacenamiento local
Crear JWT para tus pruebas
El constructor de JWT de NoxaKit te permite montar tokens con el contenido que quieras y firmarlos con un secreto HMAC-SHA256, algo muy práctico para escribir datos de prueba de integración o depurar la lógica de verificación sin montar un servidor de autenticación completo.