Italiano

Strumenti per sviluppatori · Decodificatore JWT

JWT exp, iat e nbf: NumericDate è secondi, non millisecondi

· Come funziona

jwt timestamp debug

JWT NumericDate secondi allineati con un orologio del browser in millisecondi
Illustrazione vettoriale originale ToolAcre

JavaScript ti dà millisecondi e JWT vuole secondi, quindi i timestamp vanno storti di un fattore mille. Questo post spiega NumericDate e come leggere correttamente le tre affermazioni temporali.

Token che non scadono mai o scadono prima del loro arrivo: i due sintomi di un errore di unità

Un errore di un fattore mille produce sintomi drammatici. Fornire JavaScript millisecondi laddove un produttore di token si aspetta secondi di epoca può allontanare la scadenza di migliaia di anni. Dividendo nuovamente il valore dei secondi è possibile posizionarlo vicino a 1970, facendo apparire scaduto un token appena emesso prima della sua prima richiesta legittima.

Un decodificatore aiuta a esporre la scala mostrando l'affermazione numerica accanto a una lettura ISO. Questo display è solo diagnostico. Un utente malintenzionato può scrivere qualsiasi numero `exp`, `iat` o `nbf` in un payload non firmato o contraffatto, quindi l'ora dell'orologio convertito ha autorità solo dopo la convalida della firma e della policy altrove.

NumericDate in RFC 7519 — secondi dall'epoca di Unix, come numero JSON, con frazioni consentite ma usate raramente

Le attestazioni temporali JWT utilizzano una rappresentazione NumericDate: un numero JSON che conta i secondi dall'epoca Unix. I numeri frazionari possono rappresentare posizioni inferiori al secondo perché l'implementazione moltiplica il valore per 1,000 prima di costruire una data. Non arrotonda prima un numero finito valido a un numero intero.

ToolAcre riconosce `exp`, `nbf`, `iat`, `auth_time` e `updated_at` come campi a forma di ora per la visualizzazione. Solo i primi tre figurano tra le descrizioni delle rivendicazioni registrate. I risultati di data non numerici, infiniti o non validi vengono omessi anziché visualizzati come orari significativi, impedendo che una stringa come "presto" venga mascherata da timestamp.

Date.now() è millisecondi: l'abitudine JavaScript che produce scadenze future

`Date.now()` restituisce millisecondi, mentre un valore NumericDate è espresso in secondi. Un produttore che deriva un'affermazione dall'orologio del browser necessita pertanto di una conversione di scala esplicita, generalmente dividendo per 1,000 prima di applicare la propria politica di arrotondamento. Il percorso di lettura ToolAcre esegue la moltiplicazione inversa esclusivamente per la visualizzazione.

Mantieni visibile la conversione delle unità nella revisione del codice. Un valore di tredici cifre in `exp` è un utile segnale di avvertimento, ma il conteggio delle cifre non costituisce una verifica e non può sostituire il contratto del produttore. Il decodificatore tenterà di riprodurre qualsiasi affermazione numerica finita che JavaScript Date può rappresentare; non reinterpreta silenziosamente i millisecondi come secondi.

exp, nbf e iat: scadenza, non prima e rilascio a, e come si applica un verificatore ciascuno

`exp` indica il tempo dopo il quale un verificatore non dovrebbe più accettare un token in base alla sua policy. `nbf` nomina un confine davanti al quale non dovrebbe essere accettato. `iat` registra un orario di emissione. ToolAcre etichetta questi significati e confronta solo `exp` e `nbf` con l'orologio di riferimento fornito.

Lo stato restituito è `expired` quando la scadenza decodificata è precedente a adesso, `future` quando non-prima è successiva a adesso e `past` per le altre attestazioni temporali visualizzate. Queste etichette sono osservazioni sull'aritmetica del carico utile. Non rappresentano una decisione di autenticazione e non valutano l'emittente, il pubblico, la chiave o la firma.

Le differenze e il margine di orologio appartengono al verificatore; questo decodificatore non definisce nessuno dei due

Lo schema chiedeva quanto lo sfasamento dell'orologio fosse ragionevole, ma né la configurazione del decoder JWT né l'implementazione definiscono un margine. Quel numero appartiene al verificatore e ai suoi requisiti di distribuzione. Inventare un valore predefinito trasformerebbe un articolo di ispezione in una politica di sicurezza non documentata, quindi questa sezione intenzionalmente non ne fornisce alcuna.

Se un servizio rifiuta un token vicino a un limite, confronta l'orologio del servizio, l'orologio dell'emittente e la policy di verifica configurata utilizzando log attendibili. ToolAcre risolve i reclami rispetto alla data corrente del browser senza finestra di tolleranza. Il suo risultato potrebbe quindi differire da quello di un server che applica deliberatamente un margine di manovra, anche quando entrambi analizzano lo stesso numero.

Esempio pratico: convertire un valore exp campione in un tempo leggibile dall'uomo e confrontarlo con iat

Supponiamo che un payload sintetico contenga `iat: 1717243200` e `exp: 1717246800`. Moltiplicando per 1,000 si ottengono ISO istanti `2024-06-01T12:00:00.000Z` e `2024-06-01T13:00:00.000Z`. Sottraendo i valori dei secondi grezzi si ottiene un intervallo di un'ora senza includere i millisecondi del browser nel calcolo.

Questa aritmetica descrive ciò che dice il carico utile. Ciò non dimostra che l'emittente abbia scelto tali valori o che un'ora sia adatta a qualsiasi applicazione. ToolAcre stampa graziosamente i numeri, genera UTC righe e può richiamare la scadenza relativa ad oggi; un verificatore deve autenticarsi in modo indipendente e applicare le proprie regole di accettazione.

Cosa non copre: se un server specifico accetterà il token, che dipende dal suo orologio e dal suo margine di manovra; un decoder mostra i valori, non il verdetto

Un decodificatore non può prevedere se un server specifico accetterà il token. Il server può utilizzare un orologio diverso, una tolleranza configurata, uno schema di attestazione più rigoroso o controlli aggiuntivi su emittenti e pubblico. Il solo fallimento della firma può rifiutare un token i cui NumericDates visualizzati sembrano perfettamente normali.

Al contrario, una scadenza futura non rende valido un token non verificato. Tratta la tabella oraria come un modo per individuare probabili errori dell'unità e raccogliere prove per il debug. Il verdetto effettivo appartiene ai log del server o a un test di verifica controllato con la chiave e la policy previste, mai nel pannello di decodifica.

Conclusione: leggi le affermazioni, fai i conti: il decodificatore ToolAcre JWT mostra exp, iat e nbf in modo da poter controllare tu stesso le unità

Leggi le affermazioni ed esegui deliberatamente l'aritmetica della scala: i secondi di NumericDate diventano JavaScript millisecondi solo al limite della data. ToolAcre rende esplicita la moltiplicazione nell'origine e visualizza il valore ISO risultante, ignorando i tipi di tempo non corretti invece di indovinare cosa intendevano i loro autori.

Mantenere la distinzione di sicurezza altrettanto esplicita. Una visualizzazione `exp` non è un'applicazione della scadenza, una visualizzazione `nbf` non è un controllo di ammissione e `iat` non è una prova di emissione. Dopo aver ispezionato un token usa e getta, utilizza il verificatore attendibile per autenticarlo e applicare l'orologio reale e la politica di reclamo del servizio.