Guía

JWT exp, iat y nbf: cómo interpretar sus fechas

Convierte y diferencia los claims temporales exp, iat y nbf de un JWT sin confundir decodificación con validación.

por Tools in a Tab · Publicado el · Revisado el

Respuesta breve

Los claims exp, iat y nbf describen momentos distintos dentro de un JWT. Los tres usan NumericDate: segundos desde 1970-01-01T00:00:00Z, ignorando segundos intercalares. No son milisegundos.

Claim Significado Regla principal
iat issued at Momento en que se emitió el token
nbf not before No aceptar antes de ese instante
exp expiration time No aceptar desde ese instante en adelante

Ejemplo

{
  "iat": 1767225600,
  "nbf": 1767225600,
  "exp": 1767229200
}

exp - iat = 3600, así que la ventana indicada dura una hora. Para ver las fechas, copia cada número al conversor de timestamp y selecciona segundos y UTC.

Decodificar no es validar

El decodificador JWT permite leer cabecera y payload localmente, pero no verifica la firma. Cualquier persona puede construir una cadena con un exp futuro. Una aplicación solo debe confiar en los claims después de validar firma o MAC, algoritmo, emisor, audiencia y las reglas propias del sistema.

Margen de reloj

La RFC 7519 permite un pequeño margen para compensar relojes ligeramente desincronizados al evaluar exp y nbf. El tamaño debe ser deliberado y pequeño; añadir un margen grande extiende en la práctica la validez del token.

Errores frecuentes

  • Tratar exp como duración en vez de instante absoluto.
  • Multiplicar un NumericDate por 1000 y guardarlo de nuevo en el JWT.
  • Considerar válido un token solo porque exp no ha pasado.
  • Ignorar nbf o confundirlo con iat.
  • Mostrar hora local sin indicar la zona.
  • Registrar o pegar tokens reales que contienen información sensible.

Para depurar, usa un token de prueba, decodifica localmente, convierte los tres claims en UTC y compara su orden. La decisión de seguridad final debe permanecer en el verificador del sistema, no en una herramienta de lectura.