Decodificatore JWT

Incolla un JSON Web Token per vedere header e payload come JSON formattato, gli orari exp, iat e nbf come date e se il token è scaduto. Puoi verificare la firma in locale con una chiave segreta o una chiave pubblica.

Header

Payload

Claim

Firma

Verifica firma

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Incolla il token completo: tre parti Base64URL separate da punti.
  2. Leggi header e payload decodificati. I claim exp, iat e nbf vengono mostrati come date, con un avviso se il token è scaduto o non ancora valido.
  3. Per verificare la firma, inserisci la chiave segreta condivisa per HS256, HS384 o HS512, oppure incolla la chiave pubblica PEM per gli algoritmi RS, PS o ES.
  4. Controlla che i claim di emittente, destinatario e soggetto corrispondano a ciò che si aspetta la tua applicazione.

Com’è fatto un JWT

Un JSON Web Token (RFC 7519) è formato da tre parti separate da punti: header.payload.signature. Header e payload sono oggetti JSON codificati in Base64URL senza padding, ed è per questo che i token iniziano quasi sempre con eyJ, la forma codificata dei caratteri iniziali {". La firma viene calcolata sulle prime due parti esattamente come compaiono nel token.

  • Header: l’algoritmo di firma in alg, di solito "typ": "JWT" e spesso un kid che indica quale chiave usare.
  • Payload: i claim, per esempio chi è l’utente, chi ha emesso il token e quando scade.
  • Firma: una firma HMAC, RSA o ECDSA che dimostra che header e payload non sono stati modificati.

Un token con cinque parti è un JWE cifrato: il suo contenuto non si può leggere senza la chiave di decifratura.

Claim registrati

ClaimNomeSignificato
issEmittenteChi ha creato e firmato il token
subSoggettoA chi si riferisce il token, di solito un ID utente
audDestinatarioIl servizio a cui è destinato il token
expScadenzaDopo questo momento il token deve essere rifiutato
nbfNon prima delPrima di questo momento il token deve essere rifiutato
iatEmesso ilQuando è stato creato il token
jtiID JWTIdentificatore univoco, usato per rilevare gli attacchi di replay

Gli orari sono valori NumericDate: secondi trascorsi dal 1° gennaio 1970 UTC, non millisecondi. Il decodificatore li mostra come date leggibili e li confronta con l’orologio del tuo dispositivo.

Decodificare non significa verificare

Chiunque può decodificare un JWT, perché il payload è solo codificato, non cifrato: non inserirvi mai password o altri dati segreti. La fiducia deriva soltanto dalla verifica della firma con la chiave corretta, e un server che accetta token dovrebbe anche:

  • consentire solo l’algoritmo previsto e rifiutare "alg": "none", che indica un token non firmato;
  • non lasciare mai che sia l’header del token a scegliere tra HMAC e RSA, altrimenti un attaccante può firmare un token contraffatto usando la tua chiave pubblica come segreto HMAC;
  • controllare exp, nbf, iss e aud a ogni richiesta.

La verifica facoltativa di questa pagina usa la Web Crypto API integrata nel browser. Decodifica e verifica avvengono sul tuo dispositivo e non viene caricato nulla. Come regola generale, non incollare mai chiavi di firma di produzione o token attivi in siti web di cui non ti fidi.

Domande frequenti

È sicuro incollare un JWT in questo decodificatore?

Il token viene decodificato e verificato da JavaScript nel tuo browser e non viene mai inviato a un server. Ricorda però che un token non ancora scaduto funziona come una password per chiunque lo possieda, quindi usa preferibilmente token di test o scaduti quando condividi screenshot o log.

Posso decodificare un JWT senza la chiave segreta?

Sì. Header e payload sono semplice JSON codificato in Base64URL, quindi si possono leggere senza alcuna chiave. La chiave segreta o pubblica serve solo per verificare la firma.

Perché il decodificatore dice che il mio token è scaduto?
Il suo claim exp indica un momento precedente all’ora attuale del tuo dispositivo. Se il token dovrebbe essere ancora valido, controlla l’orologio di sistema e la durata del token configurata dall’emittente.
Quali algoritmi di firma si possono verificare?

HS256, HS384 e HS512 con una chiave segreta condivisa, e RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384 ed ES512 con una chiave pubblica in formato PEM.

Che cosa significa "alg": "none"?

Indica un JWT non protetto con firma vuota, definito nella RFC 7518. Chiunque può creare o modificare un token di questo tipo, quindi un server che si aspetta token firmati deve sempre rifiutarlo.