bitlvl
IT

Decodificatore JWT

Incolla un token per leggere cosa contiene. I tempi vengono tradotti in date, la scadenza viene confrontata con il tuo orologio, e i token firmati con HMAC possono essere verificati con il segreto. Nulla viene inviato da nessuna parte.

 

I token firmati con RS256, ES256 o EdDSA richiedono la chiave pubblica dell’emittente e qui non vengono verificati, ma si decodificano normalmente.

Header

Payload

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Anatomia di un JWT

Un JSON Web Token (RFC 7519) è formato da tre parti codificate in Base64URL unite da punti: header.payload.firma. L’header dice quale algoritmo lo ha firmato. Il payload è un oggetto JSON di claim sul soggetto. La firma copre le prime due parti, così un verificatore può capire se qualcosa è stato alterato.

Le prime due parti sono solo codificate, non cifrate. Chiunque abbia il token può leggere ogni claim, ed è per questo che questo decodificatore funziona senza alcuna chiave, e che un JWT non deve mai contenere segreti.

Claim standard

ClaimSignificato
issIssuer: chi ha creato il token
subSubject: di chi parla il token, di solito un ID utente
audAudience: per quale servizio è destinato il token; i verificatori devono controllarlo
expScadenza, come timestamp Unix in secondi
nbfNot before: il token non è valido prima di questo momento
iatEmesso il
jtiID univoco del token, usato per le liste di revoca

Algoritmi di firma

HS256 (HMAC con SHA-256) usa un unico segreto condiviso sia per firmare sia per verificare, quindi chiunque possa verificare può anche falsificare; va bene per un singolo servizio che parla con se stesso. RS256, ES256 ed EdDSA usano una chiave privata per firmare e una pubblica per verificare, che è ciò che usano gli identity provider (Auth0, Keycloak, Google, Azure AD) perché qualsiasi servizio possa controllare i token senza poterli emettere. Le chiavi pubbliche sono di solito pubblicate a un URL /.well-known/jwks.json.

Cosa devono controllare i verificatori

  1. La firma, con una chiave adatta all’alg nell’header, e senza mai accettare "alg": "none".
  2. Che exp sia nel futuro e nbf, se presente, nel passato (ammettendo un piccolo scostamento degli orologi).
  3. Che iss e aud siano i valori attesi.

Domande

È sicuro incollare qui il mio token?

Il token viene decodificato da JavaScript nel tuo browser e non viene trasmesso. Ciononostante, un token è una credenziale: trattalo come una password, e preferisci token di prova a breve durata quando fai debug.

Perché il decodificatore dice che il mio token è scaduto?

Il suo claim exp è precedente all’orologio del tuo computer. I token di solito durano poco (da minuti a ore); prendine uno nuovo dall’endpoint di login o di refresh. Se il tuo orologio è sbagliato, anche il controllo lo sarà.

Posso verificare qui un token RS256?

Non in questa versione. RS256 richiede la chiave pubblica dell’emittente (dal suo endpoint JWKS). Il decodificatore mostra header, payload e controlli temporali per qualsiasi algoritmo; solo gli algoritmi HMAC possono essere verificati con un segreto.

Perché il payload è leggibile senza il segreto?

Perché un JWT è firmato, non cifrato. Base64URL è reversibile per progetto. Se il contenuto deve essere nascosto, il token va cifrato come JWE, che sembra simile ma ha cinque parti.

Cosa significa il timestamp in exp?

Secondi dal 1º gennaio 1970 UTC (tempo Unix). Il decodificatore lo converte in una data nel tuo fuso orario e mostra quanto manca. Usa lo strumento del timestamp Unix per convertire altri valori.