Decoder JWT
Incolla un JWT (tre parti codificate in base64url separate da punti) e il decoder mostra l’intestazione, il payload e la firma, decodificati e formattati, insieme all’algoritmo rilevato, la scadenza del token nel tuo fuso orario e se nbf (non prima), iat (emesso il) e exp (scadenza) sono coerenti. Verifica della firma opzionale se hai la chiave segreta o pubblica.
Come decodificare un JWT
-
1
Incolla il token
Tre stringhe base64url separate da `.` (intestazione.payload.firma).
-
2
Leggi l'intestazione decodificata
Algoritmo, tipo, ID chiave (`kid`). L'algoritmo ti dice quale tipo di chiave ti serve per la verifica.
-
3
Leggi il payload
Claim standard (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) più eventuali claim personalizzati emessi dalla tua applicazione.
-
4
Verifica (opzionale)
Fornisci la chiave segreta HMAC (per HS256/384/512) o la chiave pubblica (per RS256, ES256, ecc.) per confermare che la firma sia valida.
Anatomia di un JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Ogni segmento è codificato in base64url (non standard base64). L’intestazione è JSON come {"alg":"HS256","typ":"JWT"}, il payload è JSON come {"sub":"1234567890","name":"Alice","iat":1600000000}, e la firma è la firma HMAC o RSA di intestazione.payload.
Claim standard (RFC 7519)
| Claim | Nome | Note |
|---|---|---|
iss |
Emittente | Chi ha emesso il token |
sub |
Soggetto | Di chi è il token |
aud |
Pubblico | Per chi è il token |
exp |
Tempo di scadenza | Timestamp Unix; rifiutato dopo questo tempo |
nbf |
Non prima | Timestamp Unix; rifiutato prima di questo tempo |
iat |
Emesso il | Timestamp Unix di creazione del token |
jti |
ID JWT | Identificatore unico per le liste di revoca |
Algoritmi supportati
Valore alg |
Tipo di chiave |
|---|---|
HS256/HS384/HS512 |
Chiave segreta HMAC condivisa |
RS256/RS384/RS512 |
Chiave pubblica RSA |
ES256/ES384 |
Chiave pubblica ECDSA |
PS256/PS384 |
Chiave pubblica RSA-PSS |
EdDSA / Ed25519 |
Curva di Edwards |
none |
Non fidarti mai di questo, token non firmati |
Il pericolo del alg: none
Le prime librerie JWT consentivano token "alg": "none" e li accettavano ingenuamente come validi. Sempre:
- Inserisci nella whitelist gli algoritmi che la tua applicazione accetta.
- Rifiuta
alg: noneincondizionatamente. - Rifiuta
alg: HS256quando il tuo codice di verifica si aspettaRS256(l’attacco di “confusione dell’algoritmo”).
Cosa NON è un JWT
- Non crittografato. L’intestazione e il payload sono codificati in base64, il che è facilmente decodificabile. Non mettere segreti in un JWT senza avvolgerlo in JWE.
- Non revocabile per impostazione predefinita. Una volta emesso, un JWT è valido fino a
exp. Per la revoca hai bisogno di una blacklist o di una scadenza breve + token di aggiornamento. - Non è un sostituto dei cookie di sessione per ogni caso d’uso. Token opachi memorizzati lato server sono spesso più semplici e sicuri.
Errori comuni
- Fidarsi dell’intestazione. Il
kidealgprovengono dal token stesso. Un server compromesso può impostarli arbitrariamente; valida sempre contro un elenco fisso. - Ignorare la differenza di
nbfeiat. La deriva dell’orologio significa cheiat > orapuò accadere. Consenti un piccolo margine (30-60s). - Registrare interi JWT. Il payload spesso contiene ID utente, email, permessi, PII che non dovrebbero finire in stdout.
- Usare HS256 con una chiave debole. Una chiave segreta di 16 caratteri è vulnerabile a forza bruta in pochi minuti. Usa almeno 256 bit di entropia casuale.
Domande frequenti
No. La decodifica avviene nel tuo browser. Il token rimane locale, importante perché i JWT spesso contengono dati di sessione, ID utente e permessi.
Sì. Se incolli la chiave segreta HMAC condivisa o la chiave pubblica codificata PEM, la verifica avviene nel tuo browser. La chiave non lascia mai la tua macchina.
Significa che il token non è firmato. Non accettare mai tali token in produzione, possono essere falsificati facilmente. Diversi CVE di alto profilo riguardavano specificamente librerie che accettavano alg: none per impostazione predefinita.
La firma JWT prova l’autenticità, non la riservatezza. L’intestazione e il payload sono codificati in base64url, il che è reversibile. Per la segretezza, usa JWE (JSON Web Encryption) attorno al JWT, o evita di mettere dati sensibili nel payload.
Strumenti correlati
Riferimento Tabella ASCII
Tabella ASCII completa da 0 a 127 con decimale, esadecimale, ottale, binario e riferimento numerico HTML per ogni carattere, inclusi i codici di controllo come NUL, LF e DEL.
Riferimento ai caratteri HTML
Elenco ricercabile delle entità HTML, dei loro codici nominati e numerici, e copia con un clic per caratteri e simboli speciali.
Generatore di lettere casuali
Genera lettere A-Z casuali. Scegli la quantità, usa maiuscole, minuscole o un mix, e applica il risultato a giochi, spunti o attività in classe.
Riferimento scorciatoie da tastiera
Cerca le scorciatoie predefinite documentate di VS Code, Chrome e Bash con GNU Readline su macOS, Windows e Linux.
Promemoria Markdown
Riferimento pratico Markdown con anteprime reali ed esempi pronti da copiare per titoli, elenchi, tabelle, codice, link, immagini e sintassi GFM.
Formatter HTML
Formatta HTML localmente nel browser con rientri di due o quattro spazi. L’HTML non viene caricato né validato.
Strumento disponibile in altre lingue
- Decoder JWT [ID]
- Mã giải mã JWT [VI]
- Decodificador JWT [ES]
- Décodeur JWT [FR]
- JWT 해독기 [KO]
- JWT-decoder [NL]
- JWT-avkodare [SV]
- JWTデコーダ [JA]
- ตัวถอดรหัส JWT [TH]
- مُفكّك JWT [AR]
- JWT-Dekoder [DE]
- Dekoder JWT [PL]
- Decodificador JWT [PT]
- Декодировщик JWT [RU]
- JWT Dekoderi [TR]
- JWT 解码器 [ZH]
- JWT Decoder [EN]