Come usare il decoder JWT
- Incolla un JSON Web Token, la lunga stringa che di solito segue
Authorization: Bearer. - Header e payload vengono decodificati e mostrati come JSON formattato.
- I claim temporali come
exp,iatenbfvengono convertiti in date leggibili, così vedi a colpo d'occhio se il token è scaduto.
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.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9si 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
| Claim | Nome | Significato |
|---|---|---|
iss | Issuer (emittente) | Chi ha creato e firmato il token. |
sub | Subject (soggetto) | A chi si riferisce il token, di solito un ID utente. |
aud | Audience (destinatari) | A quale servizio o servizi è destinato il token. |
exp | Expiration time (scadenza) | Timestamp Unix dopo il quale il token deve essere rifiutato. |
nbf | Not before (non prima di) | Timestamp Unix prima del quale il token non è ancora valido. |
iat | Issued at (emesso il) | Timestamp Unix in cui il token è stato creato. |
jti | JWT ID | Identificatore 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
expenbftra 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