Che cos’è un JSON Web Token?
Un JSON Web Token (JWT) è un involucro compatto e URL-safe per un piccolo payload di claim. È il formato di credenziale standard per sessioni web stateless, token ID OAuth/OIDC, autenticazione API machine-to-machine e link magici firmati. Un JWT è sempre costituito da tre segmenti base64url uniti da punti: header.payload.signature. L'intestazione e il payload sono JSON; la firma è un MAC binario o una firma digitale calcolata sui primi due segmenti.
Come funzionano i JWT?
Quando questo strumento decodifica un token, segue lo stesso percorso in tre fasi adottato da ogni libreria JWT:
- Divide il token sui punti in esattamente tre segmenti non vuoti. Qualsiasi altra forma è malformata.
- Decodifica in base64url i segmenti 0 e 1, quindi esegue
JSON.parsesu ciascuno. L'intestazione contiene l'algoritmo (alg) e il tipo di token (typ). Il payload contiene i claim (sub,exp,iat, chiavi personalizzate). - Se viene fornita una chiave segreta, ricalcola il MAC su
<segment0>.<segment1>usando l'algoritmo indicato nell'intestazione. Confronta i byte con il terzo segmento. - Mostra il risultato della verifica insieme ai claim decodificati, incluso un indicatore di scadenza leggibile calcolato dal claim
exp.
Perché decodificare i JWT nel browser?
Incollare un JWT reale e in uso in un debugger remoto espone la credenziale ai log di quel servizio, al suo stack di osservabilità e a qualunque partner a cui il servizio inoltri i dati. Anche quando il sito di terze parti dichiara di non registrare i token, non hai modo di verificarlo. Questo strumento è stato costruito affinché tu non debba mai scendere a quel compromesso:
- Zero rete: il runtime non effettua chiamate a
fetch,XMLHttpRequestosendBeacon. Apri DevTools mentre decodifichi e verifichi — il pannello Rete resta in silenzio. - Web Crypto nativo: la verifica HMAC utilizza
crypto.subtle.importKeyecrypto.subtle.sign, le stesse primitive che chiamerebbe il tuo runtime. - Deploy statico: ogni pagina è un singolo file HTML statico senza alcun endpoint server da compromettere. Non c'è alcun token da far trapelare perché non c'è alcun server a cui possa trapelare.
Che cosa verifica questo strumento, e che cosa non verifica?
La versione 1 di questo strumento verifica solo le firme della famiglia HMAC-SHA. Nel concreto:
- Supportati: HS256, HS384, HS512. Fornisci la chiave segreta condivisa e lo strumento ricalcolerà e confronterà il MAC.
- Non ancora supportati: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA e PS256/384/512 (RSA-PSS). Questi richiedono una chiave pubblica in formato PEM o JWK e sono volutamente rimandati a una release successiva.
- Rifiutati:
alg: "none". Lo strumento decodifica il token ma lo segnala esplicitamente come insicuro — nessuna convalida della firma è in atto e qualsiasi sistema di produzione che accetti un token simile presenta una grave vulnerabilità.
Com’è fatto un esempio di decodifica JWT?
Incolla il token di esempio canonico della RFC 7519 nel campo di input qui sopra:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
L'intestazione si decodifica in {"alg":"HS256","typ":"JWT"} e il payload in {"sub":"1234567890","name":"John Doe","iat":1516239022}. Inserisci your-256-bit-secret nel pannello di verifica e il controllo della firma restituisce valida. Modifica un singolo carattere della chiave segreta e restituisce non valida. Nulla di tutto ciò lascia il tuo browser.
Questo è il decodificatore JWT che avremmo voluto avere quando dovevamo eseguire il debug di un token in produzione: rispettoso della privacy, veloce e costruito sulle stesse primitive usate dal runtime.