100 % locale — i tuoi dati non lasciano mai il tuo browser

JWT in JSON — leggi i claim che ci sono dentro

Decodifica header e payload di un JWT, firma non verificata. Leggi exp, iss e gli scope, che di solito spiegano perché un token viene rifiutato.

Istantaneo Privato Zero cookie
Indentazione

Input JWT

Output JSON

Che cosa fa questo strumento

Entra un token, escono la sua intestazione e il suo payload in JSON.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpM
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890"
  }
}

I due segmenti sono in Base64URL, che è una codifica e non una cifratura: chiunque abbia il token può leggerli, qui o con tre righe di codice. La firma non viene mostrata da nessuna parte perché non c’è nulla da leggerci — è una prova, e provare richiede una chiave.

Decodificare non è verificare

Il payload qui sopra dice che il soggetto è 1234567890. Che lo dica non prova niente: cambia il testo, ricodificalo, e avrai un token che si decodifica altrettanto pulito e che fallisce la verifica. Questa pagina non può accorgersene, e nessun decodificatore può — è proprio a questo che serve la firma.

Quindi: un decodificatore serve a vedere che cosa pretende un token, il tuo server e la tua chiave servono a decidere se crederci. Se un giorno i due si contraddicono, ha ragione la firma.

Tre segmenti, e soltanto tre

Not a JWT: expected header.payload.signature, found 2 segments

Un JWT compatto ne ha esattamente tre. Due o quattro venivano decodificati comunque: un token troncato da un copia e incolla tornava con un’aria perfettamente sana — un difetto trovato scrivendo questa pagina e corretto. Cinque segmenti sono un altro formato: un JWE, il cui payload è cifrato anziché codificato, e il messaggio lo dice invece di fallire sulla decodifica.

Leggere il payload

  • Gli identificatori numerici lunghi sopravvivono. Un sub di venti cifre passa cifra per cifra, invece di essere arrotondato a un vicino da un numero JavaScript.
  • exp, iat e nbf sono timestamp Unix. In secondi, non in millisecondi, come vuole la specifica. Lo strumento dei timestamp di questo sito li trasforma in date.
  • Le dichiarazioni sono ciò che l’emittente ci ha messo. alg, typ, sub, iss e aud sono standard; il resto è un accordo tra i tuoi due capi.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

La firma viene controllata?
No, e nessuno strumento del browser può farlo: verificare richiede il segreto o la chiave pubblica, cioè proprio ciò che non va incollato da nessuna parte. Decodificare ti dice che cosa afferma il token; verificare ti dice se crederci. Il payload che vedi qui può averlo scritto chiunque — Base64URL è una codifica, non una protezione. Verifica lato server, con la tua chiave.
Il mio token viene inviato da qualche parte?
No. La decodifica avviene nel tuo browser e niente lascia la pagina — utile saperlo, perché un token di produzione incollato in un decodificatore online è una credenziale consegnata a uno sconosciuto. Anche così, preferisci un token scaduto o di prova quando puoi: questa pagina non può promettere nulla sulla macchina su cui stai scrivendo.
Perché il mio token viene rifiutato?
Perché non ha tre segmenti. Un JWT in forma compatta è `header.payload.signature`, e due o quattro segmenti venivano decodificati lo stesso: un token tagliato da un copia e incolla tornava con l’aria di stare bene. Cinque segmenti sono un JWE — il suo payload è cifrato, non solo codificato, e nessuno lo legge senza la chiave. Il messaggio ora dice in quale caso ti trovi.

Convertitori correlati