Glossario · Testing delle API
JWT (JSON Web Token)
In inglese: JWT
Detto anche: JSON Web Token, JSON Web Tokens, token JWT
Definizione
Un JSON Web Token è un token compatto e firmato nella forma header.payload.signature che trasporta claim come id utente, scadenza e audience.
Un JSON Web Token (JWT, spesso pronunciato “jot”) è una stringa composta da tre parti codificate in Base64url e separate da punti: un header che indica come è stato firmato, un payload di claim e una firma. Le API lo ricevono di solito nell’header Authorization: Bearer <token> e ne verificano la firma per fidarsi dei claim senza consultare un database. Molti provider OAuth 2.0 e OpenID Connect emettono access token e ID token in formato JWT.
Esempio
Un payload decodificato:
{
"iss": "https://auth.example.com",
"sub": "user_7f3a",
"aud": "orders-api",
"role": "member",
"iat": 1767225600,
"exp": 1767229200
}
iss è l’emittente (issuer), sub il soggetto (di solito l’utente), aud il destinatario previsto, e iat/exp gli istanti di emissione e di scadenza in secondi dall’epoch Unix. Per leggere il payload in Node 22 non serve alcuna libreria:
const [, payload] = token.split('.');
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
Codificato, non cifrato
Un JWT firmato standard (un JWS) è codificato, non cifrato. Chiunque abbia il token può leggerne tutti i claim, come mostra lo snippet qui sopra. La firma dimostra soltanto che il token è stato emesso da qualcuno in possesso della chiave e che non è stato alterato. Quindi non mettere mai segreti o dati personali nel payload di un JWT, a meno che il token non sia effettivamente cifrato (un JWE, un formato distinto e meno comune). Decodificare un token non equivale a validarlo: un test che decodifica un token non ha verificato nulla sulla sua autenticità.
Cosa testare
- Token scaduto: imposta o attendi che
expsia passato e aspettati401. - Payload manomesso: cambia
roleinadmin, mantieni la vecchia firma e aspettati401. Se viene accettato, il server non sta verificando le firme. alg: none: un token senza firma deve essere rifiutato.- Audience o issuer sbagliati: un token valido per un’altra API non deve funzionare qui.
- Token valido, permessi sbagliati: aspettati
403, non401, perché l’utente è autenticato ma non autorizzato. - Logout e revoca: i JWT di solito restano validi fino alla scadenza, quindi verifica cosa fa il sistema dopo un logout o un cambio password. Una scadenza breve unita ai refresh token è la mitigazione più comune.