Utilia

Generatore e verificatore JWT

Crea e verifica JSON Web Token con HS256, RS256, PS256, ES256 o EdDSA. Modifica i claim, imposta exp e iat e controlla le firme nel tuo browser.

Chiavi e token sono segreti. Tutto viene firmato e verificato in locale con la Web Crypto API del tuo browser: non viene caricato nulla.

Crea un JWT firmato

Claim temporali:

Verifica un JWT

Come creare un JWT firmato

  1. Scegli l’Algoritmo: HS256/384/512 (segreto condiviso), RS256/384/512 o PS256/384/512 (RSA), ES256/384/512 (ECDSA su P-256, P-384 o P-521) oppure EdDSA (Ed25519, se il tuo browser lo supporta).
  2. Modifica l’Header (JSON) e il Payload (claim JSON). Il campo alg segue sempre l’algoritmo selezionato e typ vale JWT per impostazione predefinita.
  3. Usa i pulsanti dei claim temporali per aggiungere le date: iat = adesso, nbf = adesso, oppure scegli una durata come “tra 1 ora” e premi Imposta exp. I valori sono NumericDate, cioè secondi trascorsi dal 1° gennaio 1970 UTC.
  4. Inserisci il Segreto (algoritmi HS, come testo o Base64/Base64url tramite Formato del segreto) oppure la Chiave privata (PEM o JWK). Non hai ancora una chiave? Premi Genera chiave di test.
  5. Premi Firma token, poi Copia il risultato oppure premi Verifica questo token per controllarlo subito.

Come verificare un JWT

  1. Incolla il token in Token da verificare.
  2. Scegli l’Algoritmo atteso. Lasciando “Dall’header del token” viene accettato qualunque algoritmo indicato nell’header, tranne none; scegliendo un algoritmo preciso lo strumento rifiuta ogni token firmato in modo diverso, proprio come dovrebbe fare un server reale.
  3. Inserisci il segreto oppure la Chiave pubblica (PEM o JWK): un blocco PEM PUBLIC KEY, RSA PUBLIC KEY o CERTIFICATE, una JWK o un JWK Set (viene usata la chiave il cui kid corrisponde all’header).
  4. Se vuoi, imposta una Tolleranza orologio (secondi) per accettare piccole differenze tra gli orologi, poi premi Verifica token.

Il risultato indica se la firma è valida e poi confronta exp (scadenza) e nbf (non prima di) con l’ora attuale del tuo computer. Un token con firma corretta ma con una scadenza nel passato viene segnalato come scaduto, non come valido.

Chiavi e formati

Per firmare, lo strumento accetta blocchi PKCS#8 PRIVATE KEY, blocchi PKCS#1 RSA PRIVATE KEY e SEC1 EC PRIVATE KEY (convertiti internamente in PKCS#8) e JWK private. Le chiavi protette da password vanno prima esportate senza password. Genera chiave di test crea un segreto casuale della dimensione dell’hash per gli algoritmi HS, una coppia di chiavi RSA da 2048 bit per RS e PS, la curva corrispondente per ES oppure una coppia Ed25519. Ottieni le chiavi in PEM e JWK, già inserite su entrambi i lati, così un ciclo completo di firma e verifica funziona subito.

Le firme seguono la RFC 7515 e la RFC 7518: RSA-PSS usa un salt lungo quanto l’hash e le firme ECDSA sono la concatenazione grezza r||s. L’implementazione riproduce l’esempio HS256 della RFC 7515, appendice A.1.

Note sulla sicurezza

  • Tutto avviene nel tuo browser con la Web Crypto API. Né i token né le chiavi vengono inviati altrove, ma è comunque meglio usare chiavi di test anziché segreti di produzione.
  • alg: none non viene mai firmato né accettato.
  • I segreti HMAC dovrebbero essere lunghi almeno quanto l’hash (32 byte per HS256). Un segreto più corto genera un avviso.
  • Una firma dimostra integrità e provenienza, non che i claim siano appropriati: i server devono controllare anche iss, aud e gli scope.

Domande frequenti

Che differenza c'è tra HS256 e RS256?

HS256 usa un unico segreto condiviso sia per firmare sia per verificare, quindi chiunque possa verificare potrebbe anche falsificare token. RS256 (come PS256, ES256 ed EdDSA) firma con una chiave privata e verifica con una chiave pubblica che si può pubblicare senza rischi.

Perché una firma valida mostra comunque un errore?

Perché il token è fuori dal suo periodo di validità: exp è nel passato oppure nbf è nel futuro. Il controllo della firma e quello delle date vengono riportati separatamente.

Perché alg "none" viene rifiutato?

Un token non firmato può crearlo chiunque. Accettarlo è stata una vulnerabilità classica delle librerie JWT, per questo lo strumento lo rifiuta sia in firma sia in verifica.

Posso usare la mia chiave RSA o EC?

Sì. Incolla la chiave privata in PEM o JWK per firmare e la chiave pubblica per verificare. Lo strumento controlla che il tipo di chiave e la curva corrispondano all’algoritmo selezionato.

Perché EdDSA è disattivato?

Il tuo browser non supporta ancora Ed25519 in Web Crypto. Le versioni recenti di Chrome, Edge, Firefox e Safari lo supportano.