Español

Herramientas de desarrollo · JWT decodificador

JWT exp, iat y nbf: NumericDate es segundos, no milisegundos

· Cómo funciona

jwt marcas de tiempo depuración

JWT NumericDate segundos alineados con un reloj de navegador de milisegundos
Ilustración de vector original de ToolAcre

JavaScript te da milisegundos y JWT quiere segundos, por lo que las marcas de tiempo fallan en un factor de mil. Esta publicación explica NumericDate y cómo leer correctamente los tres reclamos de tiempo.

Tokens que nunca caducan o caducan antes de llegar: los dos síntomas de un error de unidad

Un error de factor de mil produce síntomas dramáticos. Proporcionar milisegundos de JavaScript donde un productor de tokens espera segundos de época puede retrasar la caducidad a miles de años de distancia. Dividir nuevamente el valor de un segundo puede colocarlo cerca de 1970, lo que hace que un token recién emitido parezca caducado antes de su primera solicitud legítima.

Un decodificador ayuda a exponer la escala mostrando el reclamo numérico al lado de una lectura ISO. Esa pantalla es sólo de diagnóstico. Un atacante puede escribir cualquier número `exp`, `iat` o `nbf` en una carga útil falsificada o sin firmar, por lo que la hora del reloj convertida tiene autoridad solo después de la firma y la validación de la política en otro lugar.

NumericDate en RFC 7519: segundos desde la época de Unix, como un número JSON, con fracciones permitidas pero rara vez utilizadas

JWT las reclamaciones de tiempo utilizan una representación NumericDate: un número JSON que cuenta segundos desde la época de Unix. Los números fraccionarios pueden representar posiciones de subsegundos porque la implementación multiplica el valor por 1,000 antes de construir una Fecha. Primero no redondea un número finito válido a un número entero.

ToolAcre reconoce `exp`, `nbf`, `iat`, `auth_time` y `updated_at` como campos con forma de tiempo para su visualización. Sólo los tres primeros se encuentran entre las descripciones de sus reclamaciones registradas. Los resultados de fecha no numéricos, infinitos o no válidos se omiten en lugar de representarse como horas significativas, lo que evita que una cadena como "pronto" se haga pasar por una marca de tiempo.

Date.now() son milisegundos: el hábito de JavaScript que produce vencimientos en el futuro lejano

`Date.now()` devuelve milisegundos, mientras que un valor NumericDate se expresa en segundos. Por lo tanto, un productor que deriva un reclamo del reloj del navegador necesita una conversión de escala explícita, comúnmente dividida por 1,000 antes de aplicar su propia política de redondeo. La ruta de lectura de ToolAcre realiza la multiplicación inversa únicamente para visualización.

Mantenga la conversión de unidades visible en la revisión del código. Un valor de trece dígitos en `exp` es una señal de advertencia útil, pero el conteo de dígitos no es una verificación y no puede reemplazar el contrato del productor. El decodificador intentará representar cualquier afirmación numérica finita que JavaScript Date pueda representar; no reinterpreta silenciosamente los milisegundos como segundos.

exp, nbf e iat: vencen, no antes y se emiten en, y cómo un verificador aplica cada uno

`exp` nombra el tiempo después del cual un verificador ya no debería aceptar un token según su política. `nbf` nombra un límite antes del cual no debe aceptarse. `iat` registra una hora de emisión. ToolAcre etiqueta estos significados y compara solo `exp` y `nbf` con el reloj de referencia suministrado.

El estado devuelto es `expired` cuando el vencimiento decodificado es anterior a ahora, `future` cuando no antes es posterior a ahora y `past` para las otras reclamaciones de tiempo mostradas. Estas etiquetas son observaciones sobre la aritmética de la carga útil. No son una decisión de autenticación y no evalúan emisor, audiencia, clave o firma.

Las diferencias de reloj y el margen de maniobra pertenecen al verificador; este decodificador no define ni

El esquema preguntaba cuánta desviación del reloj es razonable, pero ni la configuración ni la implementación del decodificador JWT definen un margen de maniobra. Ese número pertenece al verificador y sus requisitos de implementación. Inventar un valor predeterminado aquí convertiría un artículo de inspección en una política de seguridad indocumentada, por lo que esta sección no proporciona ninguna intencionalmente.

Si un servicio rechaza un token cerca de un límite, compare el reloj del servicio, el reloj del emisor y la política del verificador configurado utilizando registros confiables. ToolAcre resuelve reclamos contra la fecha actual del navegador sin ventana de tolerancia. Por lo tanto, su resultado puede diferir del de un servidor que aplica deliberadamente margen de maniobra, incluso cuando ambos analizan el mismo número.

Ejemplo resuelto: convertir un valor de exp de muestra a un tiempo legible por humanos y compararlo con iat

Supongamos que una carga útil sintética contiene `iat: 1717243200` y `exp: 1717246800`. Multiplicar por 1,000 da los instantes ISO `2024-06-01T12:00:00.000Z` y `2024-06-01T13:00:00.000Z`. Restar los valores de segundos sin procesar produce un intervalo de una hora sin mezclar milisegundos del navegador en el cálculo.

Esa aritmética describe lo que dice la carga útil. No demuestra que el emisor haya elegido esos valores ni que una hora sea adecuada para cualquier aplicación. ToolAcre imprime los números, genera filas UTC y puede llamar al vencimiento antiguo en relación con el día de hoy; un verificador debe autenticar y hacer cumplir de forma independiente sus propias reglas de aceptación.

Lo que esto no cubre: si un servidor específico aceptará el token, lo que depende de su reloj y margen de maniobra; un decodificador muestra los valores, no el veredicto

Un decodificador no puede predecir si un servidor específico aceptará el token. El servidor puede utilizar un reloj diferente, una tolerancia configurada, un esquema de reclamo más estricto o verificaciones adicionales de emisor y audiencia. La falla de la firma por sí sola puede rechazar un token cuyas NumericDates mostradas parecen perfectamente normales.

Por el contrario, un vencimiento futuro no hace que un token no verificado sea válido. Trate el cronograma como una forma de detectar posibles errores de la unidad y recopilar evidencia para la depuración. El veredicto real pertenece a los registros del servidor o a una prueba de verificación controlada con la clave y la política esperadas, nunca al panel de decodificación.

Conclusión: lea las afirmaciones, haga la aritmética: el decodificador ToolAcre JWT muestra exp, iat y nbf para que pueda verificar las unidades usted mismo

Lea las afirmaciones y realice aritmética de escala deliberadamente: los segundos de NumericDate se convierten en milisegundos de JavaScript solo en el límite de fecha. ToolAcre hace que esa multiplicación sea explícita en la fuente y muestra el valor ISO resultante, ignorando los tipos de tiempo con formato incorrecto en lugar de adivinar lo que pretendían sus autores.

Mantenga la distinción de seguridad igualmente explícita. Una visualización `exp` no es una aplicación de vencimiento, una visualización `nbf` no es un control de admisión y una `iat` no es una prueba de emisión. Después de inspeccionar un token desechable, utilice el verificador confiable para autenticarlo y aplicar el reloj real y la política de reclamos del servicio.