Anatomía de un JWT
Un JSON Web Token (RFC 7519) son tres partes codificadas en Base64URL unidas por puntos: cabecera.carga.firma. La cabecera dice qué algoritmo lo firmó. La carga es un objeto JSON de claims sobre el sujeto. La firma cubre las dos primeras partes, así que un verificador puede saber si algo se alteró.
Las dos primeras partes solo están codificadas, no cifradas. Cualquiera que tenga el token puede leer todos los claims, por eso este decodificador funciona sin clave, y por eso un JWT nunca debe llevar secretos.
Claims estándar
| Claim | Significado |
|---|---|
| iss | Emisor: quién creó el token |
| sub | Sujeto: de quién trata el token, normalmente un ID de usuario |
| aud | Audiencia: para qué servicio está pensado el token; los verificadores deben comprobarlo |
| exp | Caducidad, como marca de tiempo Unix en segundos |
| nbf | Not before: el token no es válido hasta ese momento |
| iat | Emitido el |
| jti | ID único del token, usado en listas de revocación |
Algoritmos de firma
HS256 (HMAC con SHA-256) usa un secreto compartido tanto para firmar como para verificar, así que quien puede verificar también puede falsificar; sirve para un servicio que habla consigo mismo. RS256, ES256 y EdDSA usan una clave privada para firmar y una pública para verificar, que es lo que usan los proveedores de identidad (Auth0, Keycloak, Google, Azure AD) para que cualquier servicio compruebe tokens sin poder emitirlos. Las claves públicas suelen publicarse en una URL /.well-known/jwks.json.
Lo que los verificadores deben comprobar
- La firma, con una clave adecuada para el
algde la cabecera, y sin aceptar nunca"alg": "none". - Que
expestá en el futuro ynbf, si existe, en el pasado (con algo de tolerancia al desfase de reloj). - Que
issyaudtienen los valores esperados.
Preguntas
¿Es seguro pegar mi token aquí?
El token lo decodifica JavaScript en tu navegador y no se transmite. Aun así, un token es una credencial: trátalo como una contraseña y prefiere tokens de prueba de corta duración al depurar.
¿Por qué el decodificador dice que mi token ha caducado?
Su claim exp es anterior al reloj de tu ordenador. Los tokens suelen ser de corta duración (de minutos a horas); consigue uno nuevo del endpoint de login o refresh. Si tu reloj va mal, la comprobación también irá mal.
¿Puedo verificar un token RS256 aquí?
En esta versión no. RS256 necesita la clave pública del emisor (de su endpoint JWKS). El decodificador muestra cabecera, carga y comprobaciones de tiempo para cualquier algoritmo; solo los algoritmos HMAC pueden verificarse con un secreto.
¿Por qué la carga es legible sin el secreto?
Porque un JWT está firmado, no cifrado. Base64URL es reversible por diseño. Si el contenido debe ocultarse, el token tiene que cifrarse como JWE, que se parece pero tiene cinco partes.
¿Qué significa la marca de tiempo de exp?
Segundos desde el 1 de enero de 1970 UTC (tiempo Unix). El decodificador la convierte a una fecha en tu zona horaria y muestra cuánto queda. Usa la herramienta de marcas de tiempo Unix para convertir otros valores.