Decodifica el claim exp de un token JWT expirado. Inspecciona el payload para ver cuando expiro y solucionar problemas de autenticación.
Decodificar un JWT expirado revela el mismo payload que un token válido. La estructura del token no cambia; el claim exp solo contiene una hora Unix en el pasado. Esto es útil para depurar errores de autenticación, verificar que claims se emitieron y saber cuando expiro un token sin acceder a los logs del servidor.
El token en este ejemplo se decodifica así:
{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "1234567890",
"name": "Alice",
"iat": 1600000000,
"exp": 1600003600,
"iss": "auth.example.com",
"aud": "api.example.com"
}
}
iat es 1600000000 (13 de septiembre de 2020, 12:26:40 UTC). exp es 1600003600, exactamente una hora después. Ambos son horas Unix en segundos. Este token expiro en septiembre de 2020.
La hora Unix en que se emitió el token. Se usa para detectar tokens emitidos antes de una rotación de claves o un cambio de contraseña del usuario. Algunos sistemas rechazan tokens con un iat anterior al último cambio de contraseña del usuario, aunque tecnicamente no hayan expirado.
La hora Unix en que el token debe ser rechazado. Los servidores verifican current_time > exp y devuelven 401 si es verdadero. La verificación es estricta: un token con exp == current_time ya se considera expirado en la mayoría de las implementaciones.
Menos comun. La hora Unix antes de la cual el token no debe ser aceptado. Útil cuando emites un token para uso futuro o cuando quieres un período de espera antes de que el token se active después de la emisión.
issued at (iat) --> valid from (nbf) --> valid until (exp)
En la práctica, iat y nbf suelen ser el mismo valor, o nbf se omite. La mayoría de los tokens solo usan iat y exp.
El reloj del servidor emisor esta adelantado respecto al servidor validador. Un token emitido en T con expiración de 5 minutos es válido hasta T+5 minutos según el emisor. Si el validador tiene el reloj 10 minutos atrasado, ve el token como válido hasta T+5d+10d. Si el validador tiene el reloj 10 minutos adelantado, rechaza el token inmediatamente después de la emisión. Monitorea la desviación del reloj en todos los servidores que emiten o validan JWT.
Los claims exp e iat son siempre horas Unix en segundos UTC. No son cadenas de fecha formateadas. La confusión surge cuando los desarrolladores registran estos valores y los interpretan como hora local, o cuando crean JWT manualmente usando hora local en lugar de epoch UTC. Para convertir un valor exp a hora legible: new Date(exp * 1000).toISOString() en JavaScript, datetime.fromtimestamp(exp, tz=timezone.utc) en Python.
Pega cualquier JWT, incluso expirado, y ve el valor exacto de exp. Usa el Convertidor de Tiempo Unix para convertirlo a fecha legible. Comparalo con iat para ver la vida útil prevista del token y con la hora actual para ver hace cuanto expiro.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.