JWT Decoder

Decoder / Encoder JWT

Decodifica un qualsiasi JSON Web Token per vederne header, payload e firma — oppure firmane uno nuovo con HS256/384/512. Verifica le firme HMAC localmente. 100% nel tuo browser.

Decoder / Encoder JWT — TL;DR

Decodifica un qualsiasi JSON Web Token per vederne header, payload e firma — oppure firmane uno nuovo con HS256/384/512. Verifica le firme HMAC localmente. 100% nel tuo browser.

No. L'intero strumento è JavaScript dentro questa pagina. Incolli un token, la decodifica avviene nel tuo browser, i byte non lasciano mai la scheda. Apri DevTools → Network e osserva — non viene inviata alcuna richiesta durante la decodifica o la verifica. Per questo è sicuro incollare token reali di clienti o di produzione.

Dimostra che il token è stato firmato da qualcuno in possesso del segreto (HMAC) o della chiave privata (RSA/ECDSA). NON cifra il payload — header e payload sono semplicemente JSON codificati in base64url, chiunque abbia il token può leggerli. La firma blocca solo le manomissioni: se cambi un singolo byte del payload, la firma non corrisponde più.

Un JWT spesso contiene ID utente, email, scope e a volte l'equivalente dei cookie di sessione — esattamente i dati che NON devi incollare nel server di un estraneo. Il decoder di iKit gira come JavaScript già caricato nella scheda del tuo browser. Verificabile in DevTools → Network: nessun fetch, nessun XHR, nessun beacon durante la decodifica o la verifica.

Header

Payload

Firma

Claims standard


            

Verifica firma HMAC

Per i token HS256/384/512, inserisci il segreto di firma per verificare la firma localmente. Per RS256/ES256 (RSA/ECDSA), usa una libreria lato server — la verifica a chiave pubblica richiede un file PEM che qui non accettiamo.

Perché iKit JWT Decoder

Il modo più rapido per fare il debug di un JWT — nessun upload, nessuna registrazione, nessuna terza parte tra te e il tuo token.

Tre pannelli, un solo incolla

Incolla un JWT e vedi affiancati header, payload e firma decodificati. I claims standard (iss, sub, aud, exp, iat) vengono datati ed etichettati.

Verifica HMAC locale

Per i token HS256/384/512, inserisci il segreto per verificare la firma usando l'API Web Crypto del browser. Il segreto non lascia mai la tua scheda.

Firma i tuoi token

Passa alla modalità Encode, modifica header e payload come JSON, scegli l'algoritmo, inserisci un segreto e ottieni un token firmato all'istante.

Privacy by design

I payload JWT contengono ID utente, email, a volte scope — non incollarli mai in uno strumento server. Il decoder di iKit gira come JavaScript nel tuo browser. Verificabile in DevTools → Network.

Consapevolezza della scadenza

I claims standard come exp, nbf, iat sono evidenziati con date leggibili e un badge chiaro SCADUTO / valido, così capisci a colpo d'occhio se il token è ancora buono.

Standard aperto, codice aperto

Costruito sull'API Web Crypto nativa del browser e sul parser JSON — gli stessi algoritmi di OpenSSL, libjwt, jose. Il comportamento corrisponde a ogni libreria JWT moderna.

Come funziona davvero la decodifica JWT

Un JWT è composto da tre segmenti JSON codificati in base64url separati da punti — tutto qui.

  1. 1

    Dividi sui due punti

    Un JWT ha l'aspetto di aaa.bbb.ccc. Dividiamo sui due punti letterali, ottenendo header, payload e firma codificati. Se non otteniamo esattamente tre parti, il token è malformato.

  2. 2

    Decodifica base64url di ogni parte

    Header e payload sono JSON UTF-8 codificati in base64url. Base64URL = Base64 con -/_ al posto di +//= e senza padding. Eseguiamo atob dopo aver ripristinato i caratteri, quindi facciamo JSON.parse della stringa risultante.

  3. 3

    Renderizza con struttura

    L'header indica l'algoritmo (alg: HS256, RS256, ecc.) e il tipo. Il payload contiene i claims — quelli standard (iss, sub, aud, exp, iat, nbf, jti) più eventuali campi personalizzati. Mostriamo ognuno in una sezione etichettata.

  4. 4

    Verifica (solo HMAC)

    Per HS256/384/512, ricalcoliamo l'HMAC di header.payload usando il segreto inserito e lo confrontiamo con la firma nel terzo segmento. Equivale a HMAC(SHA-256, secret, signing_input) codificato in base64url. Coincidenza = firma valida.

Attività comuni di debug JWT

Situazioni reali in cui ti servirà un decoder JWT.

Ispezionare un token del tuo provider di autenticazione

Auth0, Firebase, Keycloak, AWS Cognito restituiscono tutti dei JWT dopo il login. Incolla l'access_token per vedere quali claims sta ricevendo davvero la tua app — qual è l'ID utente, quali scope, quando scade?

Debug di un 401 Unauthorized

L'API rifiuta la tua richiesta? Decodifica il token per controllare: è scaduto (exp nel passato)? Il claim audience (aud) è quello che l'API si aspetta? L'issuer (iss) è il tenant giusto?

Verificare la firma di un webhook

Stripe, GitHub Apps, Slack inviano payload di webhook firmati come JWT. Dopo averne ricevuto uno, incollalo in modalità Decode con il segreto condiviso per confermare che la richiesta provenga davvero da loro.

Generare token di test

Ti serve un JWT firmato fresco per un test di integrazione? Passa alla modalità Encode, modifica il payload (ID utente personalizzato, scadenza personalizzata), scegli HS256 + il tuo segreto di test, ottieni un token in millisecondi. Senza round-trip al backend.

Perché la decodifica JWT locale è importante

Un JWT spesso contiene ID utente, email, scope e a volte l'equivalente dei cookie di sessione — esattamente i dati che NON devi incollare nel server di un estraneo. Il decoder di iKit gira come JavaScript già caricato nella scheda del tuo browser. Verificabile in DevTools → Network: nessun fetch, nessun XHR, nessun beacon durante la decodifica o la verifica.

  • Zero richieste di rete durante la decodifica o la verifica — verificabile in DevTools.
  • Il segreto inserito per la verifica resta nella memoria del browser e viene cancellato con Cancella / refresh.
  • Sicuro per token di produzione, access token dei clienti e segreti dei webhook.

Guide correlate

Tutorial approfonditi e confronti tra strumenti dal blog di iKit.

Domande frequenti

È sicuro? I miei JWT vengono caricati da qualche parte?

No. L'intero strumento è JavaScript dentro questa pagina. Incolli un token, la decodifica avviene nel tuo browser, i byte non lasciano mai la scheda. Apri DevTools → Network e osserva — non viene inviata alcuna richiesta durante la decodifica o la verifica. Per questo è sicuro incollare token reali di clienti o di produzione.

Cosa verifica davvero la firma di un JWT?

Dimostra che il token è stato firmato da qualcuno in possesso del segreto (HMAC) o della chiave privata (RSA/ECDSA). NON cifra il payload — header e payload sono semplicemente JSON codificati in base64url, chiunque abbia il token può leggerli. La firma blocca solo le manomissioni: se cambi un singolo byte del payload, la firma non corrisponde più.

Perché il payload decodificato sembra corretto ma la verifica fallisce?

Tre cause comuni: (1) segreto sbagliato — i segreti JWT sono case-sensitive e qualsiasi differenza di spazi rompe la verifica. (2) Algoritmo non corrispondente — l'header dice HS256 ma il segreto era usato con HS512 in origine. (3) Il token è stato modificato dopo la firma — anche un solo byte rompe la firma. Controlla che header.alg corrisponda a quello che ti aspetti.

E per RS256, ES256 e altri algoritmi a chiave pubblica?

iKit attualmente supporta solo la verifica HMAC (HS256/384/512). RS256 ed ES256 usano crittografia a chiave pubblica — la verifica richiede la chiave pubblica dell'emittente in formato PEM, che è una UI più complessa. Per ora la decodifica funziona comunque (le parti header/payload/signature vengono mostrate correttamente), ma il pulsante Verifica ti dirà che non è supportato. La verifica RSA/ECDSA è in programma.

In cosa è diverso da jwt.io?

Stessa idea, default diversi. Il decoder di iKit gira interamente nel tuo browser (anche jwt.io lo fa, ma il codice di iKit è ispezionabile da view-source e il nostro dominio non ha tracker di terze parti). Aggiungiamo un badge chiaro SCADUTO / valido per il claim exp, note strutturate sui claims (iat / nbf / iss / sub / aud / jti come righe leggibili) e un pulsante copia-tutto-decodificato che ti dà l'output completo strutturato da incollare in un bug report.