Cos’è un JWT
Un JSON Web Token (JWT, RFC 7519) è una stringa compatta che trasporta un header e un payload JSON, opzionalmente protetti da una firma o da cifratura autenticata. La forma firmata comune sono tre segmenti Base64URL separati da punti:
base64url(header) . base64url(payload) . base64url(signature)
Il payload include tipicamente claim come subject (sub), audience (aud), scadenza (exp) e campi applicativi. Poiché il payload di un JWT firmato (non cifrato) è solo codificato, chiunque ottenga il token può leggere i claim. La firma rileva manomissioni e, con un segreto condiviso o una chiave pubblica, conferma chi ha emesso il token.
Ispeziona un token di esempio con lo strumento Decodifica JWT—la sola decodifica non dimostra che la firma sia valida.
Sottostrumenti in questa famiglia
- Decodifica JWT — divide e decodifica in Base64URL header e payload così puoi leggere algoritmi e claim localmente nel browser.
- Firma JWT HS256 — costruisce un token da un payload JSON e un segreto condiviso usando HMAC-SHA256.
- Verifica JWT HS256 — ricalcola la firma HMAC-SHA256 con il tuo segreto e segnala se corrisponde.
Percorso di apprendimento tipico: firma un payload usa-e-getta, decodificalo per ispezionare i claim, poi verifica con lo stesso segreto. Cambiare qualsiasi carattere del payload deve far fallire la verifica.
HS256 e il ruolo di HMAC
HS256 significa HMAC-SHA256 sui segmenti header e payload. Emittente e verificatore condividono un segreto. Quel modello si adatta ad API first-party e token di sessione semplici. Si adatta male quando molti client non fidati devono verificare token senza detenere il segreto dell’emittente—lì servono algoritmi asimmetrici (RS256, ES256) con un JWKS pubblico.
La verifica HS256 è forte solo quanto la conservazione del segreto. Incorporare il segreto in un’app mobile pubblica o in un bundle frontend consente a chiunque di falsificare token.
Per la costruzione MAC sottostante, vedi anche l’hub HMAC, in particolare HMAC SHA-256.
Claim da trattare con attenzione
exp / nbf / iat. Le finestre di scadenza e not-before impediscono il riuso indefinito. I verificatori devono rifiutare token scaduti; i decoder che stampano solo JSON non applicano il tempo per te.
alg. L’header annuncia l’algoritmo. Codifica in modo fisso l’algoritmo atteso sul verificatore (solo HS256, ad esempio). Vulnerabilità storiche accettavano alg: none o passavano da RS256 a HS256 trattando una chiave pubblica come segreto HMAC.
aud e iss. I controlli di audience e issuer impediscono che token emessi per un servizio siano accettati da un altro.
Dati sensibili nel payload. Preferisci identificatori opachi ai dati personali grezzi in JWT non cifrati. Ricorda che log, cronologia del browser e header Referer possono far trapelare token.
Decodifica versus verifica
| Operazione | Dimostra leggibilità | Dimostra autenticità |
|---|---|---|
| Decodifica | Sì (JWT non cifrato) | No |
| Verifica HS256 | Serve il segreto | Sì, se il segreto è corretto e il confronto è solido |
Verifica sempre nei percorsi applicativi che autorizzano azioni. Decodificare in un debugger è per gli umani; la verifica crittografica è per le macchine che decidono l’accesso.
Dettagli Base64URL
JWT usa Base64URL senza padding nella serializzazione classica. Ciò differisce dal Base64 standard (+// vs -/_). Mescolare gli alfabeti ricostruendo token a mano è una causa frequente di errori di firma non valida. Preferisci API di libreria che gestiscono la codifica piuttosto che concatenazioni artigianali in produzione.
Modalità di guasto comuni
- Sfasamento dell’orologio: un token appena emesso sembra «non ancora valido» o già scaduto—consentire un piccolo margine se la piattaforma lo documenta.
- UTF-8 e canonizzazione JSON: rifirmare dopo il pretty-print cambia i byte e rompe le firme.
- Segreto diverso tra ambienti (staging vs produzione).
- Trattare il successo della decodifica come successo del login.
- Mettere password o dati di carta nei claim JWT.
Limiti e ambiente
Questi strumenti si concentrano su apprendimento e debug HS256. Non implementano l’intero stack JOSE (cifratura JWE, ogni algoritmo JWA o federazione JWKS). L’elaborazione lato client tiene i token di esempio sul dispositivo; evita comunque di incollare token di sessione di produzione su macchine condivise.
Riepilogo
I JWT impacchettano claim in una stringa compatta e firmata. Questo hub consente di decodificare header e payload, firmare con HS256 e verificare firme HMAC-SHA256. Leggi i claim con cautela, verifica prima di fidarti, proteggi i segreti condivisi e scegli algoritmi asimmetrici quando i verificatori non devono condividere la chiave dell’emittente.