JSON Web Tokens explicados: header, payload y firma, los siete claims registrados del RFC 7519, los riesgos de seguridad y un decodificador que nunca envía tu token a ningún sitio.
Un JWT (JSON Web Token) es una cadena compacta y segura para URLs formada por tres partes en base64url separadas por puntos: un header que indica el algoritmo, un payload con claims como sub y exp, y una firma. Cualquiera puede decodificar y leer el payload; solo la firma, comprobada con la clave correcta, demuestra que nadie lo ha modificado.
Nombres de claims registrados (RFC 7519, sección 4.1)
Pega un token en el decodificador de abajo para ver su header y su payload, con cada claim registrado explicado y cada marca de tiempo convertida en una fecha legible. La decodificación ocurre en el propio JavaScript de esta página, así que el token nunca se sube. Eso importa, porque un token activo es una llave a la cuenta de alguien.
Solo si la decodificación ocurre en tu navegador. El token es una credencial: cualquiera que tenga uno válido puede usar la API como ese usuario hasta que expire. El decodificador de esta página funciona en local y no envía nada, pero con tokens de producción lo más seguro es acostumbrarse a decodificar solo tokens de prueba.
Un JWT firmado normal (un JWS) no lo está. Su payload solo está codificado en base64url, algo que cualquiera puede revertir. Existen tokens cifrados, los JWE, con cinco partes separadas por puntos en lugar de tres, pero la mayoría de los tokens de inicio de sesión y de API están firmados, no cifrados.
NumericDate: segundos enteros desde 1970-01-01T00:00:00Z, sin contar segundos intercalares. Date.now() de JavaScript devuelve milisegundos, así que divide entre 1000 antes de comparar, un error muy habitual.
Cualquier script que se ejecute en la página puede leer localStorage, así que un solo fallo de cross-site scripting puede robar el token. Una cookie HttpOnly, Secure y SameSite lo mantiene fuera del alcance de los scripts, a cambio de tener que gestionar CSRF. Muchos equipos eligen la cookie para las sesiones del navegador.
No por sí solo, porque el token sigue siendo válido hasta exp. Usa una expiración corta más refresh tokens que puedas revocar, o mantén una lista de bloqueo de valores jti para los tokens que deban morir antes.
Lee los claims sin verificarlos. Sirve para mostrar un nombre de usuario en la UI, nunca para decidir el acceso.
jwtVerify comprueba la firma, exp y nbf, y con estas opciones también el emisor, la audiencia y el algoritmo permitido.
Pega un token para leer su header y su payload. La decodificación se hace en tu navegador; el token no se envía, no se guarda y no se registra.
Quién emitió el token
A quién se refiere el token, normalmente un id de usuario
Qué destinatarios deben aceptarlo
Rechazar a partir de este momento
Rechazar antes de este momento
Cuándo se creó el token
Un id único, útil para bloquear la reutilización
JWT
Cargar token de ejemplo
Borrar
Header
Payload
Firma (no se verifica aquí)
Claims explicados
Claim
Valor
Significado
Claim personalizado
Un JWT firmado tiene 3 partes separadas por puntos; este tiene {n}.
5 partes significa un JWE cifrado, que no se puede leer sin la clave.
La parte {n} no es JSON válido en base64url.
Expiró {v}
Válido hasta {v}
No es válido hasta {v}
alg es none: este token no tiene firma y debe rechazarse.
Decodificado en local. Nada sale de esta página.
Empieza gratis · Sin tarjeta de crédito