Come decodificare e ispezionare token JWT
I token JSON Web Token (JWT) sono il modo più comune di gestire l'autenticazione nelle applicazioni web moderne. Quando qualcosa non va lato auth — un utente è disconnesso senza ragione, i permessi sono sbagliati, o un'API restituisce 401 — decodificare il JWT è spesso il primo passo di debug.
Cosa contiene un JWT
Un JWT ha tre parti separate da punti:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U
Intestazione — contiene l'algoritmo (HS256, RS256, ecc.) e il tipo di token.
{"alg": "HS256", "typ": "JWT"}
Payload — contiene claim (asserzioni) sull'utente e sul token.
{"sub": "1234567890", "name": "Alice", "exp": 1700000000}
Firma — un'impronta crittografica che garantisce che il token non sia stato alterato. Non puoi leggerla senza la chiave di firma.
Claim JWT comuni
| Claim | Nome completo | Contenuto |
|---|---|---|
sub |
Subject | ID o identificatore utente |
exp |
Expiration | Timestamp Unix di fine validità |
iat |
Issued At | Timestamp Unix di creazione |
iss |
Issuer | Chi ha creato il token (il tuo server di auth) |
aud |
Audience | A chi è destinato il token |
nbf |
Not Before | Il token non è valido prima di questa data |
jti |
JWT ID | Identificatore unico del token |
Come decodificare un JWT
- Incolla il tuo token — inserisci il JWT completo (formato intestazione.payload.firma) nel decoder.
- Consulta le sezioni decodificate — lo strumento mostra l'intestazione (algoritmo), il payload (claim) e la firma sotto forma di JSON formattato.
- Verifica i claim — esamina la data di scadenza, l'emittente, il soggetto e qualsiasi claim personalizzato.
Eseguire il debug con i JWT
Token scaduto? Verifica il claim exp. Converti il timestamp Unix in data leggibile. Se è passata, il token è scaduto e deve essere aggiornato.
Permessi sbagliati? Cerca claim di ruolo o di scope nel payload. Variano a seconda delle implementazioni ma spesso assomigliano a "role": "admin" o "scope": "read write".
Problema di identità utente? Il claim sub identifica l'utente. Verifica che corrisponda all'ID atteso.
Token rifiutato? Verifica il claim aud (audience). Se l'API si aspetta un'audience specifica e il token ne ha un'altra, sarà rifiutato.
Note di sicurezza importanti
- I JWT non sono cifrati — chiunque può decodificare il payload. Non mettere password, chiavi API o altri segreti in un JWT.
- Verifica sempre le firme lato server — un decoder ti mostra cosa rivendica il token, ma solo la verifica della firma prova che non sia stato alterato.
- Verifica la scadenza — i token scaduti devono sempre essere rifiutati. Se la tua applicazione accetta token scaduti, è una falla di sicurezza.
Domande frequenti
Posso verificare una firma JWT con un decoder?
No. La verifica della firma richiede il segreto di firma o la chiave pubblica, conservati sul tuo server. Un decoder ti mostra cosa c'è nel token, ma la verifica crittografica deve avvenire sul tuo backend. Non fidarti mai di un JWT non verificato in produzione.
È sicuro incollare un JWT in uno strumento online?
Sì, quando lo strumento gira nel tuo browser. I decoder nel browser elaborano il token localmente — niente viene inviato a un server. Evita gli strumenti che fanno richieste di rete con il tuo token.
Cos'è il claim exp?
Il claim exp (expiration) è un timestamp Unix che indica quando il token scade. Dopo questa data, il token deve essere rifiutato. Verifica sempre questo claim per fare il debug di problemi di autenticazione.
I JWT possono essere cifrati?
I JWT standard (JWS) sono firmati ma non cifrati — chiunque può decodificare il payload. I token JWE (JSON Web Encryption) sono cifrati, ma meno comuni. Non mettere mai dati sensibili (password, segreti) in un payload JWT standard.