Qué hace esta herramienta
Un JSON Web Token (JWT) es la cadena larga de letras y puntos que muchas API y sistemas de inicio de sesión entregan al identificarte. Esta herramienta lo abre: muestra la cabecera y el payload como JSON legible, convierte los claims de tiempo en fechas reales en tu zona horaria y dice si el token ha caducado. Si el token está firmado con un secreto compartido (HS256, HS384 o HS512), puedes escribir el secreto para comprobar también la firma. El token se lee en tu navegador y no se envía a ningún sitio, algo importante porque un token vigente es una llave a la cuenta de alguien.
Decodificar no es verificar
Esto es lo más importante de los JWT. La cabecera y el payload solo están codificados en Base64URL, no cifrados, así que cualquiera con el token puede leerlos, y cualquiera puede escribir un token con el contenido que quiera. Ver "admin": true en un token decodificado no prueba nada. Solo la comprobación de la firma demuestra que el token lo creó alguien que conoce el secreto o la clave privada y que no se modificó después. Los servidores deben verificar la firma en cada petición y decidir ellos qué algoritmos aceptan, sin fiarse nunca del campo alg del token; un token con alg: none no está firmado y es un ataque clásico.
Las tres partes
Un token son tres cadenas Base64URL unidas por puntos: cabecera.payload.firma. En el token de ejemplo más conocido, la cabecera es {"alg":"HS256","typ":"JWT"} y el payload {"sub":"1234567890","name":"John Doe","iat":1516239022}. La firma es un HMAC de 32 bytes de las dos primeras partes. Puedes comprobarlo: con el secreto your-256-bit-secret el ejemplo se verifica y con cualquier otro no. Pulsa Ejemplo para probarlo.
Leer las fechas
Tres claims contienen tiempos, todos como número de segundos desde el 1 de enero de 1970 UTC:
- exp es cuándo deja de ser válido. Desde ese instante el token debe rechazarse.
- nbf (not before) es cuándo empieza a ser válido.
- iat (issued at) es cuándo se creó.
La herramienta muestra cada uno como fecha en tu zona horaria, como ISO 8601 en UTC y en forma relativa, por ejemplo "hace 3 días". Con iat 1516239022 y exp 1516242622 las fechas son el 18 de enero de 2018 a las 01:30:22 y 02:30:22 UTC, es decir, el token duró una hora. Un error frecuente es escribir exp en milisegundos: queda decenas de miles de años en el futuro. Si un claim no es un número de segundos válido, la herramienta lo dice en vez de mostrar una fecha falsa.
Comprobar una firma
En HS256, HS384 y HS512 la firma es un HMAC con SHA-256, SHA-384 o SHA-512 sobre cabecera.payload, usando el secreto. Escribe el secreto, o marca que está en Base64URL si tu sistema lo guarda así. La comprobación usa Web Crypto del navegador y el secreto no sale de la página. Los tokens RS256, ES256 y similares usan una clave privada y se comprueban con una clave pública, algo que esta herramienta no hace; lo dice en lugar de adivinar.