Come si usa
- Incolla il token completo: tre parti Base64URL separate da punti.
- 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.
- 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.
- 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 unkidche 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
| Claim | Nome | Significato |
|---|---|---|
iss | Emittente | Chi ha creato e firmato il token |
sub | Soggetto | A chi si riferisce il token, di solito un ID utente |
aud | Destinatario | Il servizio a cui è destinato il token |
exp | Scadenza | Dopo questo momento il token deve essere rifiutato |
nbf | Non prima del | Prima di questo momento il token deve essere rifiutato |
iat | Emesso il | Quando è stato creato il token |
jti | ID JWT | Identificatore 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,isseauda 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?
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.