Decoder JWT
Decodifica e ispeziona i JSON Web Token
Token JWT
Cos'è un JWT (JSON Web Token)?
Un JSON Web Token (JWT) è un formato di token compatto e sicuro per URL, definito nella RFC 7519. Codifica un insieme di claim come oggetto JSON, quindi lo firma — e facoltativamente lo cifra — in modo che il destinatario possa verificare che i dati non siano stati manomessi. I JWT sono lo standard de facto per l'autenticazione senza stato nelle REST API, nei sistemi di single sign-on e nell'autorizzazione dei microservizi.
Anatomia del JWT: Header · Payload · Firma
Ogni JWT è composto da tre segmenti codificati in base64url separati da punti. L'header e il payload sono JSON semplice — leggibili da chiunque — mentre la firma è un valore crittografico che può essere verificato solo con la chiave corretta.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "user123",
"name": "Alice",
"role": "admin",
"iat": 1717200000,
"exp": 1717203600
}Perché usare un decoder JWT?
I JWT grezzi sembrano testo casuale. Questo strumento visualizza istantaneamente l'header e il payload come JSON formattato, così puoi esaminare i claim, verificare i tempi di scadenza e controllare le scelte degli algoritmi senza scrivere una sola riga di codice.
Riferimento ai claim JWT standard
La RFC 7519 definisce sette nomi di claim registrati. Non sono obbligatori, ma il loro utilizzo è fortemente raccomandato per l'interoperabilità. Puoi aggiungere qualsiasi claim personalizzato al payload.
| Claim | Descrizione | Tipo |
|---|---|---|
| iss | Emittente — Identifica chi ha emesso il token — es. l'URL del server di autenticazione o il nome dell'applicazione. | string |
| sub | Soggetto — Identifica il principale a cui si riferisce il JWT — tipicamente un ID utente o un account di servizio. | string |
| aud | Audience — Identifica i destinatari previsti. La parte ricevente deve verificare che corrisponda al proprio identificatore. | string | string[] |
| exp | Tempo di scadenza — Timestamp Unix dopo il quale il token non deve essere accettato. Impostalo sempre per limitare i danni da un token rubato. | number |
| nbf | Non prima di — Timestamp Unix prima del quale il token non deve essere accettato. Utile per pianificare token con data futura. | number |
| iat | Emesso il — Timestamp Unix in cui il token è stato emesso. Usato per calcolare l'età del token. | number |
| jti | JWT ID — Un identificatore univoco per il token. Consente la revoca memorizzando e verificando i valori JTI utilizzati lato server. | string |
Algoritmi di firma JWT
Il claim di header alg dichiara quale algoritmo ha firmato il token. La scelta influisce sulla sicurezza, sulle prestazioni e sulla capacità dei servizi di terze parti di verificare i token senza la chiave privata.
| Algoritmo | Famiglia | Tipo di chiave | Note |
|---|---|---|---|
| HS256 | HMAC | Symmetric | Il più comune. Segreto condiviso — chiunque abbia il segreto può firmare e verificare. |
| HS384 | HMAC | Symmetric | Variante HMAC più robusta; costo di prestazioni moderato. |
| HS512 | HMAC | Symmetric | Variante HMAC più forte. |
| RS256 | RSA | Asymmetric | Algoritmo asimmetrico più utilizzato (Google, Auth0, Okta). La chiave pubblica verifica senza la chiave privata. |
| RS384 | RSA | Asymmetric | Variante RS con sicurezza maggiore. |
| RS512 | RSA | Asymmetric | Variante RS più forte. |
| ES256 | ECDSA | Asymmetric | Curva ellittica — firme più corte di RSA, popolare su mobile e IoT. |
| PS256 | RSA-PSS | Asymmetric | RSA-PSS: più moderno e sicuro rispetto a RS256 basato su PKCS1v1.5. |
| none | — | — | Nessuna firma — criticamente pericoloso. Non accettare mai token con alg: none in produzione. |
Considerazioni sulla sicurezza
Decodificare un JWT è sempre sicuro. Fidarsi di un JWT senza una corretta verifica della firma non lo è. Tieni a mente queste regole ogni volta che consumi token nella tua applicazione.
- –Decodificare e ispezionare un JWT negli strumenti per sviluppatori o in questo strumento
- –Usare exp, iat e nbf per comprendere la durata del token
- –Registrare i claim del payload per il debug (omettere PII sensibili)
- –Leggere l'header alg per capire come è stato firmato il token
- –Fidarsi dei claim nel payload senza verificare la firma lato server
- –Accettare token con alg: none — significa nessuna firma
- –Memorizzare token di accesso in localStorage in applicazioni ad alta sicurezza (preferire cookie httpOnly)
- –Impostare exp molto nel futuro per token che portano permessi sensibili
Casi d'uso comuni
Decodifica JWT nel codice
L'header e il payload sono codificati in base64url — basta invertire la codifica. Base64url sostituisce + con - e / con _, e omette il padding =. Solo la firma richiede la chiave segreta.
function decodeJWT(token) {
const [, payload] = token.split('.')
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
return JSON.parse(json)
}const [, payload] = token.split('.')
const decoded = JSON.parse(
Buffer.from(payload, 'base64url').toString()
)import base64, json
def decode_jwt(token):
payload = token.split('.')[1]
padding = '=' * (-len(payload) % 4)
return json.loads(base64.urlsafe_b64decode(payload + padding))TOKEN="eyJhbGc..." echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .