In questo articolo
Cos'e un JWT?
Un JSON Web Token (JWT) e un formato di token compatto e sicuro per URL utilizzato per trasmettere informazioni in modo sicuro tra le parti come oggetto JSON. Un JWT e composto da tre parti codificate in Base64URL separate da punti: header.payload.firma. L'header specifica l'algoritmo di firma, il payload contiene i claim (dati), e la firma verifica che il token non sia stato alterato.
I JWT consentono l'autenticazione stateless — il server non ha bisogno di memorizzare dati di sessione perche tutte le informazioni necessarie sono incorporate nel token stesso. Questo rende i JWT ideali per sistemi distribuiti, microservizi e API.
Struttura di un JWT spiegata
Ogni JWT e composto da tre parti distinte, ciascuna con un ruolo specifico nel ciclo di vita del token:
- Header — un oggetto JSON che specifica il tipo di token (typ: JWT) e l'algoritmo di firma (alg: HS256, RS256, ecc.), poi codificato in Base64URL
- Payload — un oggetto JSON contenente claim come iss (emittente), sub (soggetto), exp (scadenza), iat (data di emissione), e qualsiasi dato personalizzato
- Firma (Signature) — creata firmando l'header e il payload codificati con una chiave segreta (HMAC) o chiave privata (RSA/ECDSA), garantendo l'integrita del token
Il payload non e crittografato — chiunque puo decodificarlo e leggerlo. Non memorizzare mai informazioni sensibili come password o numeri di carte di credito nel payload di un JWT.
Algoritmi di firma
La scelta dell'algoritmo di firma determina come viene creata e verificata la firma del JWT. Esistono tre famiglie principali:
- HMAC (HS256, HS384, HS512) — algoritmi simmetrici che utilizzano la stessa chiave segreta per firma e verifica. Semplici da implementare, ideali per configurazioni a server singolo
- RSA (RS256, RS384, RS512) — algoritmi asimmetrici che utilizzano una chiave privata per firmare e una pubblica per verificare. Ideali per sistemi distribuiti
- ECDSA (ES256, ES384, ES512) — algoritmi asimmetrici che utilizzano crittografia a curve ellittiche. Offrono la stessa sicurezza di RSA con chiavi piu piccole e calcolo piu veloce
Per la maggior parte delle applicazioni web, HS256 e sufficiente quando emittente e consumatore del token sono lo stesso server. Scegli RS256 o ES256 quando i token devono essere verificati da terze parti.
Prova gratuitamente — nessuna registrazione richiesta
Crea e firma JWT →Codifica vs decodifica
Codificare un JWT significa creare un nuovo token assemblando l'header, il payload e generando la firma con la propria chiave segreta o privata. Questo viene tipicamente fatto lato server durante il login o il rinnovo del token.
Decodificare un JWT puo significare due cose: estrarre i claim del payload senza verificare la firma, o verificare completamente la firma per confermare che il token e autentico. I sistemi in produzione devono sempre verificare la firma.
Casi d'uso comuni
I JWT sono diventati lo standard per i moderni pattern di autenticazione e autorizzazione nelle applicazioni web e mobile:
- Autenticazione API — i client includono il JWT nell'header Authorization (Bearer token) con ogni richiesta
- Token di accesso OAuth 2.0 — i provider OAuth emettono JWT come token di accesso con informazioni su scope e permessi
- Comunicazione tra microservizi — i servizi passano JWT tra loro per propagare identita utente e permessi attraverso i confini del servizio
- Single Sign-On (SSO) — un provider di identita centrale emette un JWT che piu applicazioni accettano
Best practice di sicurezza
I JWT sono potenti ma richiedono un'implementazione attenta per evitare le comuni insidie di sicurezza:
- Impostare tempi di scadenza brevi — usa claim exp da 15 minuti a 1 ora per i token di accesso
- Non memorizzare mai dati sensibili nel payload — i payload JWT sono solo codificati in Base64URL, non crittografati
- Validare sempre tutti i claim — verificare exp, iss, aud e qualsiasi claim personalizzato ad ogni richiesta
- Usare esclusivamente HTTPS — trasmettere JWT solo tramite connessioni crittografate
- Rifiutare l'algoritmo "none" — validare sempre che l'header alg corrisponda all'algoritmo atteso
Domande frequenti
Qual e la differenza tra JWT e cookie di sessione?
I cookie di sessione memorizzano un ID di sessione sul client mentre i dati effettivi della sessione risiedono sul server. I JWT sono autonomi — tutti i dati sono nel token stesso. Questo rende i JWT stateless e piu facili da scalare orizzontalmente, ma piu difficili da revocare.
Come posso revocare un JWT prima della scadenza?
Poiche i JWT sono stateless, non esiste un meccanismo di revoca integrato. Le strategie comuni includono: mantenere una blocklist di token, usare token di accesso a breve scadenza con rotazione dei refresh token, o memorizzare una versione del token nel record utente.
C'e un limite di dimensione per i JWT?
Non c'e un limite formale nella specifica JWT, ma esistono limiti pratici. La maggior parte dei server HTTP limita le dimensioni degli header a 8 KB. Si raccomanda di mantenere i token sotto i 4 KB.