MiServe DevTools

I tuoi adesivi

Fissa qui gli strumenti. Restano salvati in questo browser.

Decodifica, verifica e firma JWT

Decodifica un JSON Web Token, leggi i suoi claim e la scadenza, verifica la firma con un secret o una chiave pubblica e firma token HMAC.

Funziona nel tuo browser. Nulla di ciò che incolli viene caricato.

Informazioni su questo strumento

Che cos'è un JWT

Un JSON Web Token firmato (RFC 7519) è composto da tre stringhe Base64URL unite da punti: un header, un payload e una firma. L'header dice come è firmato il token (alg). Il payload è un oggetto JSON di claim, cioè affermazioni come chi riguarda il token (sub), chi lo ha emesso (iss) e quando scade (exp). La firma è calcolata sulle prime due parti.

Decodificare non vuol dire verificare. Header e payload sono solo codificati, non cifrati: chiunque abbia un token può leggerlo, come fa questa pagina senza alcuna chiave, e chiunque può scrivere un token con i claim che vuole. Non mettere mai un segreto nel payload di un JWT, e non fidarti mai di un claim prima che la firma sia stata verificata.

Verificare la firma

HS256, HS384 e HS512 sono HMAC: lo stesso secret firma e verifica, quindi chiunque può verificare può anche falsificare. RS256, PS256 ed ES256 e le relative varianti 384 e 512 sono asimmetrici: l'issuer firma con una chiave privata e tu verifichi con la chiave pubblica, che spesso è pubblicata come JWK Set al jwks_uri dell'issuer.

Incolla il secret, oppure la chiave pubblica in formato PEM, come certificato X.509 o come JWK. La verifica la fa la Web Crypto API del tuo browser. Il risultato è uno di tre: la firma è valida, non è valida, oppure non è stato possibile verificarla. In quest'ultimo caso la pagina dice perché: manca la chiave, la chiave ha il tipo o la curva sbagliati, l'algoritmo non è supportato, oppure l'header dice "alg": "none", il che significa che il token non è firmato affatto.

Una firma valida è necessaria ma non sufficiente. Un servizio reale deve controllare anche la scadenza, l'issuer e l'audience, e deve decidere da sé quale algoritmo accettare invece di fidarsi dell'header del token.

Orari, token di esempio e firma

exp, nbf e iat sono timestamp Unix in secondi. La tabella dei claim li mostra come date nel tuo fuso orario, e il badge sopra di essa dice se il token è scaduto, se non è ancora valido o per quanto tempo resta valido, secondo l'orologio del tuo dispositivo.

La pagina si apre con un token di esempio creato nel tuo browser, emesso adesso e valido per un'ora. È firmato con HS256 e con il secret di esempio devtools-sample-secret-not-for-production, ed è per questo che la verifica riesce. Quel secret è pubblico: non usarlo per nulla di reale.

Firma costruisce un token a partire dall'header e dal payload che modifichi e da un secret HMAC. Usalo per i test e lo sviluppo in locale. Token, secret e chiavi che inserisci restano in questa scheda: nulla viene inviato, salvato o registrato nei log.

Domande

È sicuro incollare qui un JWT?

Il token viene decodificato e verificato da JavaScript nel tuo browser e non viene inviato a un server. Detto questo, un token non ancora scaduto è una credenziale funzionante, quindi fai attenzione con qualsiasi strumento che te ne chieda uno e preferisci token scaduti o di test.

Chiunque può leggere il contenuto di un JWT?

Sì. Header e payload sono JSON codificato in Base64URL, non cifrato, quindi chiunque abbia il token può leggerli senza una chiave. La firma non nasconde nulla: dimostra solo che il token è stato creato da qualcuno che possiede la chiave di firma e che non è stato alterato in seguito.

Qual è la differenza tra HS256 e RS256?

HS256 usa un unico secret condiviso sia per firmare sia per verificare, quindi ogni parte che verifica potrebbe anche creare token. RS256 usa una chiave privata per firmare e una chiave pubblica per verificare, e questo permette a molti servizi di verificare token che solo l'issuer può creare.

Perché il mio token risulta scaduto?

Il suo claim exp indica un istante passato secondo l'orologio del tuo dispositivo. Alcuni server tollerano una piccola differenza di orario, ma un token scaduto va sostituito, accedendo di nuovo o usando un refresh token.

Altri strumenti in Codifica