Skip to main content
CheckTown
Dev Tools

JWT Encoder: Creare e firmare JSON Web Token per l'autenticazione

Pubblicato 7 min di lettura
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.

Strumenti correlati