SuperDevTools

Decodificare JWT online

Attenzione ai token reali

Non incollare un token di produzione ancora attivo in un sito che non conosci: chi lo legge può usarlo fino alla scadenza. Qui decodifica, verifica e creazione avvengono interamente nel tuo browser: non viene inviato nulla e nessun token o segreto viene salvato.

Incolla il token completo (tre parti separate da punti). Il prefisso «Bearer» viene tolto da solo.

Incolla un token per vedere intestazione, payload e date.

Verificare la firma

Creare un token HS256 di prova

Un decoder JWT che resta nel tuo browser

Un JWT (JSON Web Token) è il token che molte API e applicazioni si scambiano dopo l'accesso. Questo strumento serve a decodificare un JWT: mostra intestazione e payload in JSON colorato, converte le date, spiega i claim standard e verifica la firma se fornisci il segreto o la chiave pubblica.

Decodifica, verifica e creazione avvengono interamente nel tuo browser: nessun token viene inviato e non si salva nulla. Detto questo, non incollare mai un token di produzione ancora attivo in un sito che non conosci: chi lo legge può usarlo fino alla scadenza.

Come si usa

  1. Incolla il token nel campo «Token JWT». Il prefisso «Bearer» copiato da un'intestazione HTTP viene tolto da solo. Il pulsante «Carica un esempio» inserisce un token dimostrativo.
  2. Le tre parti compaiono a colori, seguite dai riquadri «Intestazione», «Payload» e «Firma». Passa il mouse su una chiave sottolineata, come exp o iss, per leggerne il significato.
  3. Il riquadro «Date e validità» converte iat, nbf ed exp in date leggibili e indica lo stato: «Scaduto da 3 giorni», «Valido ancora per 45 minuti»…
  4. In «Verificare la firma» inserisci il segreto condiviso per HS256, HS384 o HS512, oppure incolla una chiave pubblica PEM o JWK per RS256, PS256 o ES256. Il verdetto sarà «Firma valida» o «Firma non valida».
  5. «Creare un token HS256 di prova» costruisce un token da un'intestazione, un payload e un segreto a tua scelta.

Com'è fatto un JWT

Un JWT firmato ha tre parti separate da punti: intestazione.payload.firma. L'intestazione eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 si decodifica in {"alg": "HS256", "typ": "JWT"} e indica l'algoritmo di firma. Il payload contiene i dati, chiamati claim. Nell'esempio dello strumento vale {"sub": "42", "name": "Esempio", "iat": 1700000000, "exp": 4102444800}: il token è stato emesso il 14 novembre 2023 alle 23:13:20 ora italiana e scade il 1° gennaio 2100 alle 01:00 ora italiana. La firma sigilla le prime due parti.

Base64url non è una cifratura

Intestazione e payload sono solo codificati in base64url, una variante di Base64 che sostituisce + e / con - e _ ed elimina gli = finali. Chiunque può leggere il payload senza alcuna chiave. La firma impedisce di modificarlo, non di leggerlo. Un token in cinque parti è un JWE, una forma cifrata che lo strumento riconosce ma non può aprire.

I claim standard

La norma definisce sette nomi brevi: iss (emittente), sub (soggetto), aud (destinatari), exp (scadenza), nbf (non prima di), iat (data di emissione) e jti (identificativo unico). Le date sono timestamp Unix in secondi.

Firme simmetriche e asimmetriche

HS256 usa lo stesso segreto per firmare e per verificare, con HMAC-SHA-256, e produce una firma di 32 byte. RS256 ed ES256 usano una coppia di chiavi: il server firma con la chiave privata e qualsiasi servizio verifica con la chiave pubblica, spesso pubblicata come JWK. Una firma RS256 con chiave a 2048 bit occupa 256 byte, una ES256 ne occupa 64. Se l'intestazione indica alg «none», il token non è firmato: lo strumento mostra un avviso, perché un server non deve mai accettarlo.

Buone pratiche

  • Dai ai token di accesso una durata breve, da pochi minuti a un'ora.
  • Non inserire password, segreti o dati sensibili nel payload: chiunque può leggerlo.
  • Verifica sempre sul server la firma, l'algoritmo atteso, exp e aud. Decodificare nel browser serve a capire un token, non a fidarsi di lui.

Domande frequenti

Posso decodificare un JWT senza la chiave?

Sì. Intestazione e payload si leggono senza alcuna chiave. Il segreto o la chiave pubblica servono solo per verificare la firma.

Perché la firma risulta non valida anche se il segreto è giusto?

Forse il server conserva il segreto in base64: spunta «Il segreto è codificato in base64url». Controlla anche gli spazi in più e che l'algoritmo dell'intestazione sia quello del tuo server.

Il mio token viene salvato?

No. Token, segreto e chiave restano nella pagina, senza invio né salvataggio. Spariscono appena chiudi o ricarichi la scheda.