Decoder JWT

RSS

Incolla un JSON Web Token per vederne header, payload e scadenza. La decodifica avviene localmente: il tuo token non viene mai inviato da nessuna parte.

Funziona al 100% nel tuo browser. Nulla di ciò che incolli viene caricato o salvato.

Header

Payload

Claim

La firma viene mostrata ma non verificata: la verifica richiede la chiave segreta o pubblica, che non dovresti mai incollare in un sito web.

Come usare il decoder JWT

  1. Incolla un JSON Web Token, la lunga stringa che di solito segue Authorization: Bearer.
  2. Header e payload vengono decodificati e mostrati come JSON formattato.
  3. I claim temporali come exp, iat e nbf vengono convertiti in date leggibili, così vedi a colpo d'occhio se il token è scaduto.
Privacy: non incollare mai token di produzione in un sito di cui non ti fidi; un token valido può essere riutilizzato da chiunque lo veda finché non scade. Questo decoder funziona interamente nel tuo browser: il token non viene mai caricato, registrato nei log o salvato. Detto questo, usa preferibilmente token di test e revoca qualsiasi token che sospetti sia stato esposto.

Com'è fatto un JWT

Un JSON Web Token, definito nella RFC 7519, è un modo compatto per trasmettere claim tra le parti. La forma firmata più comune (JWS) ha tre parti separate da punti:

header.payload.signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.<signature>
  • Header: JSON che descrive il token, soprattutto l'algoritmo di firma. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 si decodifica in {"alg":"HS256","typ":"JWT"}.
  • Payload: JSON che contiene i claim, cioè le affermazioni sull'utente o sulla sessione.
  • Firma: calcolata sull'header e sul payload codificati con un segreto (HMAC, ad es. HS256) o con una chiave privata (ad es. RS256, ES256).

Ogni parte è codificata in base64url, l'alfabeto Base64 sicuro per gli URL e senza padding. Per questo i token contengono - e _, e per questo i JWT iniziano quasi sempre con eyJ: è così che viene codificata l'apertura {" di un oggetto JSON quando segue un tipico nome di chiave in minuscolo. Puoi esplorare la codifica stessa con il codificatore Base64.

Claim registrati

ClaimNomeSignificato
issIssuer (emittente)Chi ha creato e firmato il token.
subSubject (soggetto)A chi si riferisce il token, di solito un ID utente.
audAudience (destinatari)A quale servizio o servizi è destinato il token.
expExpiration time (scadenza)Timestamp Unix dopo il quale il token deve essere rifiutato.
nbfNot before (non prima di)Timestamp Unix prima del quale il token non è ancora valido.
iatIssued at (emesso il)Timestamp Unix in cui il token è stato creato.
jtiJWT IDIdentificatore univoco, utile per impedire il riutilizzo.

Nella RFC 7519 sono tutti facoltativi; sono le applicazioni a decidere quali richiedere. I claim temporali sono in secondi, non in millisecondi; il convertitore timestamp Unix spiega la differenza.

Errori comuni

Decodificare non significa verificare

Chiunque può decodificare un JWT: è esattamente ciò che fa questo strumento. La decodifica ti dice cosa un token afferma, non se quelle affermazioni sono autentiche. Un server deve verificare la firma con la chiave corretta e controllare exp, nbf, iss e aud prima di fidarsi di qualsiasi cosa nel payload.

Il payload non è segreto

Un JWT firmato è leggibile da chiunque lo possieda. Non inserire nel payload password, dati personali che non esporresti al client o segreti interni. Se il contenuto deve restare riservato, usa un JWT cifrato (JWE) o tieni i dati sul server.

alg: none e confusione dell'algoritmo

Le specifiche JOSE definiscono un valore "alg": "none" per i token non protetti con firma vuota. Una libreria che rispetta l'header del token stesso potrebbe accettare un token contraffatto come questo:

{"alg": "none", "typ": "JWT"}
{"sub": "admin"}
(firma vuota)

Un attacco simile trasforma un token RS256 in HS256, in modo che la chiave pubblica venga usata impropriamente come segreto HMAC. La difesa è la stessa per entrambi: configura sul server gli algoritmi consentiti e non lasciare mai che sia il token a scegliere.

Consigli

  • Dai agli access token una durata breve e usa i refresh token per le sessioni più lunghe.
  • Prevedi una piccola tolleranza per lo sfasamento degli orologi (ad esempio un minuto) quando controlli exp e nbf tra server diversi.
  • Usa una libreria JWT ben mantenuta invece di analizzare e verificare i token a mano.

Domande frequenti

Questo strumento può verificare la firma di un JWT?

La verifica richiede il segreto o la chiave pubblica dell'emittente e deve avvenire nel tuo backend. Questo strumento serve a esaminare l'header e i claim di un token durante il debug.

Perché il mio token risulta scaduto?

Il claim exp è precedente all'ora attuale del tuo dispositivo. Controlla che l'orologio sia corretto e che l'emittente abbia scritto exp in secondi.

I JWT sono cifrati?

I JWT firmati (JWS), la stragrande maggioranza di quelli in uso, sono solo codificati e firmati, quindi chiunque può leggerli. I JWT cifrati (JWE) hanno cinque parti invece di tre.

È sicuro incollare qui il mio token?

La decodifica avviene in locale e non viene trasmesso nulla. Come regola generale, evita di incollare token di produzione attivi in qualsiasi strumento online che non hai verificato.

Aggiornato

Copiato negli appunti