Curious TechieDev Toolbox
Tutte le Guide/Autenticazione8 min read

Cos’è un JWT? Architettura dei JSON Web Token (RFC 7519)

Autenticazione stateless, struttura a tre parti, codifica Base64URL, attacchi di algoritmo e verifica crittografica.

Punti Chiave
  • Un JWT è composto da 3 parti separate da punti: Header, Payload e Firma.
  • Le informazioni sono codificate in Base64URL e possono essere lette da chiunque senza password.
  • Decodificare un JWT NON significa validarlo: la sicurezza risiede nella verifica della firma.
  • La vulnerabilità alg: "none" si verifica quando i server accettano token privi di firma.
  • L’architettura stateless rende necessaria una deny-list o un TTL breve per la revoca immediata.

Nelle moderne architetture a microservizi stateless e OAuth 2.0 / OpenID Connect, i JSON Web Tokens (JWT) rappresentano lo standard (RFC 7519) per trasmettere attestazioni di identità in modo sicuro tra client e server.

1. Anatomia del Token in 3 Parti

Una stringa JWT è formata da tre sezioni codificate in Base64URL separate da punti (.):

1. Header (Rosso)Algoritmo & Tipo di Token
2. Payload (Viola)Claim & Dati Utente
3. Firma Digitale (Blu)Garantita Crittografica

2. Claim Registrati Standard (iss, exp, sub)

  • iss (Issuer): L’entità che ha emesso il token.
  • sub (Subject): ID univoco dell’utente autenticato.
  • exp (Expiration Time): Timestamp Unix oltre il quale il token non è più valido.
  • iat (Issued At): Timestamp di emissione del token.

3. Firma Simmetrica (HS256) vs Asimmetrica (RS256)

HS256 (HMAC-SHA256) usa un’unica chiave segreta condivisa. RS256 (RSA-SHA256) firma con una chiave privata e verifica tramite chiave pubblica (JWKS), permettendo a terze parti di validare l’integrità senza rischiare la diffusione della chiave di firma.

4. Errori Critici di Sicurezza e Vulnerabilità

Le vulnerabilità più frequenti includono l’accettazione dell’header "alg": "none", la memorizzazione in localStorage (esposto a XSS) e la mancata verifica della firma prima di considerare attendibili i dati.