Skip to main content

Decodifica un JSON Web Token e vedi header e payload.

Tutti i calcoli sono eseguiti localmente nel tuo browser. Nessun dato viene inviato al server.

I risultati hanno carattere informativo. Verificali con altre fonti.

Leggere un JSON Web Token

Un JWT è formato da tre segmenti Base64url uniti da punti: un'intestazione che dice come è stato firmato, un payload di dichiarazioni e una firma sui primi due. Decodificare mostra che cosa il token afferma, non se sia vero.

Come funziona

  • Divide il token sui suoi due punti in intestazione, payload e firma.
  • Decodifica i primi due segmenti da Base64url a JSON e li formatta per la lettura.
  • Mostra le dichiarazioni temporali standard — exp, iat, nbf — come date, poiché sono salvate come secondi Unix.
  • Non tocca la firma: verificarla richiede il segreto o la chiave pubblica dell'emittente, che non va mai incollata in una pagina web.
token   = base64url(intestazione) . base64url(payload) . base64url(firma)
firma   = HMAC oppure RSA/ECDSA sui primi due segmenti
exp/iat = secondi dal 1970-01-01T00:00:00Z (non millisecondi)

Esempio pratico

L'intestazione di quasi ogni token HS256 esistente, scomposta a mano.

  1. JSON dell'intestazione: {"alg":"HS256","typ":"JWT"}
  2. codifica Base64: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  3. nota che il riempimento = finale viene rimosso: JWT lo omette sempre
  4. un payload {"sub":"1234567890","iat":1516239022}
  5. 1516239022 secondi → 2018-01-18T01:30:22Z

Il token decodificato dice di essere firmato con HMAC-SHA256, di riguardare il soggetto 1234567890 e di essere stato emesso il 18 gennaio 2018. Se sia autentico è una domanda separata, a cui risponde la firma.

Come leggere il risultato

  • Decodificare non è verificare. Un token il cui payload dica admin: true non prova nulla finché la firma non torna con una chiave di cui ti fidi. Non prendere mai una decisione di autorizzazione basandoti sul solo payload decodificato.
  • Non incollare token di produzione nei decodificatori online. Questo gira interamente nel tuo browser e non invia nulla, ma non vale per ogni sito del genere, e un token bearer è una password.
  • Il payload è solo codificato, non cifrato. Chi possiede il token legge ogni dichiarazione: non metterci mai un segreto.
  • Controlla exp rispetto all'ora corrente e rifiuta ciò che è scaduto. Controlla anche iss e aud: una firma valida dall'emittente sbagliato resta il token sbagliato.
  • alg: none è un valore reale e un attacco reale. Un verificatore che si fidi della scelta di algoritmo nell'intestazione può ricevere l'istruzione di non verificare affatto.

Domande frequenti

Questo strumento può dirmi se il mio token è valido?
No, e nessun decodificatore può farlo senza la tua chiave. Mostra ciò che il token afferma. La validità richiede che la firma torni, che il token non sia scaduto e che emittente e destinatario siano quelli attesi: controlli che spettano al server, tramite una libreria.
È sicuro incollare qui il mio token?
Questa pagina decodifica nel browser e non trasmette nulla. Anche così, l'abitudine sicura è usare token di un ambiente di test. Tratta ogni token che dà accesso reale come una password.
Perché la mia data exp finisce nel 1970?
Quasi certamente stai passando millisecondi dove la specifica richiede secondi. Date.now() in JavaScript restituisce millisecondi: dividi per 1000 prima di inserire il valore in una dichiarazione.