Vai al contenuto
SDETRole
SDETRole

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 exp sia passato e aspettati 401.
  • Payload manomesso: cambia role in admin, mantieni la vecchia firma e aspettati 401. 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, non 401, 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.

Scrivi per cercare in tutto SDETRole.

Ricerca full-text con Pagefind · funziona nel tuo browser Apri la pagina di ricerca →