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
- 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.
- Le tre parti compaiono a colori, seguite dai riquadri «Intestazione», «Payload» e «Firma». Passa il mouse su una chiave sottolineata, come
expoiss, per leggerne il significato. - Il riquadro «Date e validità» converte
iat,nbfedexpin date leggibili e indica lo stato: «Scaduto da 3 giorni», «Valido ancora per 45 minuti»… - 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».
- «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,
expeaud. 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.