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.