Decodificatore JWT gratuito

Decodifica e ispeziona i JSON Web Tokens · intestazione, payload, claim e scadenza.

Intestazione


      

Payload


      

Firma


      

Informazioni sui JWTs

I JSON Web Tokens (JWTs) sono un modo compatto per rappresentare claim tra due parti. Sono composti da tre parti: un'intestazione (algoritmo e tipo), un payload (claim come emittente, scadenza, soggetto) e una firma. Questo strumento decodifica l'intestazione e il payload ma non verifica le firme · per questo, è necessario il segreto di firma o la chiave pubblica. Tutta la decodifica avviene nel tuo browser; il tuo token non viene mai inviato da nessuna parte.

Una breve storia dei JSON Web Token

Il JSON Web Token (JWT) è stato standardizzato come RFC 7519 nel maggio 2015 da Michael B. Jones (Microsoft), John Bradley (Ping Identity) e Nat Sakimura (NRI) sotto il Gruppo di Lavoro JOSE dell'IETF. Fu il culmine di mezzo decennio di lavoro: il primo internet-draft JWT apparve nel dicembre 2010, sviluppandosi dal pesante formato di asserzione basato su XML di SAML 2.0 (2005) e dalla sentita necessità di qualcosa di più leggero che i browser potessero analizzare nativamente. La svolta fu scegliere JSON anziché XML e base64url anziché PEM: un JWT poteva stare in una stringa di query URL o in un header Authorization: Bearer. L'intera famiglia JOSE fu consegnata come un set coordinato: RFC 7515 (JWS) per la firma, RFC 7516 (JWE) per la crittografia, RFC 7517 (JWK) per il formato chiave, RFC 7518 (JWA) per gli identificatori di algoritmo e RFC 7519 (JWT) per il livello delle dichiarazioni, tutto lo stesso giorno di maggio 2015. L'adozione fu istantanea. OAuth 2.0 (RFC 6749, 2012) aveva standardizzato i token di accesso ma lasciato il loro formato opaco; l'industria scelse JWT. OpenID Connect (dicembre 2014, OpenID Foundation) rese JWT obbligatorio per i token ID. Entro il 2017 ogni grande provider di identità (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) emetteva JWT come formato di sessione nativo. JWT.io, il sito web decodificatore lanciato da Auth0 nel 2014, divenne lo strumento de facto per il debug JWT e contribuì a cementare la quota di mente degli sviluppatori per il formato. Due incidenti di sicurezza hanno plasmato il modello di minaccia moderno: la divulgazione di Tim McLean del 2015 del bypass alg: none e dell'attacco di confusione di algoritmo HS/RS, e CVE-2022-21449 (aprile 2022), il bug «Psychic Signatures» di Neil Madden nel verificatore ECDSA di Java 15-18. Entrambi hanno portato all'indurimento predefinito delle librerie: la maggior parte delle librerie moderne ora rifiuta alg: none a priori e fissa l'algoritmo previsto invece di leggerlo dall'header del token.

L'anatomia di un JWT

Dove vengono usati i JWT in pratica

Standard e pietre miliari della sicurezza

Altre domande frequenti

Perché questo strumento non verifica la firma?

La verifica ha bisogno di un segreto (HMAC) o di una chiave pubblica (RSA / ECDSA / EdDSA). Incollare un segreto HMAC di produzione in qualsiasi sito web è di per sé una fuga di credenziali, anche su uno strumento che giura di non trasmettere nulla. La verifica appartiene a un server che controllate. Il lavoro del decoder è rendere il contenuto leggibile in modo che possiate vedere cosa il vostro verificatore dovrebbe controllare.

È sicuro incollare qui veri token di produzione?

La decodifica avviene interamente nel vostro browser. Il token non viene inviato sulla rete, scritto in alcun log, o memorizzato da nessuna parte. Detto questo, un JWT spesso è una credenziale: chiunque detenga un token di accesso non scaduto può agire come l'utente. La convenzione della comunità è «trattate un JWT di produzione come un cookie di sessione»: preferite token di test quando potete, e ruotate qualsiasi token reale abbiate condiviso fuori dalla sessione del browser che l'ha coniato.

Dove dovrei memorizzare un JWT nel browser?

I due pattern comuni hanno ciascuno un compromesso. localStorage è conveniente ma leggibile da qualsiasi attacco XSS riuscito sulla pagina. I cookie con HttpOnly sono invisibili a JavaScript quindi XSS non può leggerli, ma hanno bisogno di SameSite=Strict o SameSite=Lax per evitare CSRF. La migliore pratica attuale: token di accesso a breve durata in una variabile JavaScript (solo memoria) più un token di refresh a lunga durata in un cookie HttpOnly + Secure + SameSite=Strict con scope sull'endpoint di refresh, ruotato a ogni uso.

Cosa fa il campo kid nell'header?

Identifica quale chiave ha firmato il token. I provider di identità moderni pubblicano le loro chiavi pubbliche a un endpoint /.well-known/jwks.json come un JWK Set (RFC 7517); il verificatore cerca la chiave il cui kid corrisponde all'header del token. Questo è ciò che rende possibile la rotazione di chiavi senza tempo di inattività: sia le chiavi vecchie che nuove possono coesistere nel JWKS durante il periodo di grazia.

Posso revocare un JWT una volta emesso?

Non nativamente. Un JWT firmato è valido fino alla sua dichiarazione exp; quella mancanza di stato è la proprietà principale del formato. Soluzioni alternative: mantenere i token di accesso brevi (5-15 minuti) abbinati a un token di refresh revocabile; mantenere un elenco di negazione lato server dei valori jti revocati; ruotare la chiave di firma (che invalida ogni token in sospeso firmato con essa). Ogni opzione re-introduce un certo stato; questo è il compromesso.

Decodificare un token è la stessa cosa che decifrarlo?

No. La decodifica inverte base64url a JSON: chiunque può farlo, e questo è il punto. La decifratura richiede una chiave e si applica solo a JSON Web Encryption (JWE, RFC 7516), che è la variante crittografata della famiglia JOSE. La maggior parte dei token che vedete in natura sono JWS (firmati ma non crittografati), quindi la decodifica è sufficiente per leggerli.

Strumenti correlati