Cosa fa
Un JSON Web Token (JWT, RFC 7519) è una stringa compatta e sicura per gli URL, divisa in tre parti da punti: un header che indica l’algoritmo di firma, un payload di claim e una firma sulle prime due parti. Le API usano i JWT come token bearer, i provider di identità come ID token.
Questo strumento crea e firma un token da un payload JSON. Supporta:
- HS256, HS384, HS512: HMAC con un segreto condiviso, come testo o Base64.
- RS256, RS384, RS512 e PS256, PS384, PS512: firme RSA con una chiave privata PEM.
- ES256, ES384, ES512: firme ECDSA con una chiave privata EC.
Come si usa
- Scrivi il payload come oggetto JSON o fai clic su Esempio.
- Scegli l’Algoritmo e inserisci il segreto o incolla la chiave privata PEM in cima alla casella di input.
- Se vuoi, imposta iat all’ora attuale, aggiungi una scadenza (exp) o campi header extra come un ID chiave.
- Copia il token dall’output. Incollalo nel decoder JWT per esaminarlo.
Esempio
Con il segreto your-256-bit-secret, il payload seguente firmato con HS256 produce il noto token di esempio di jwt.io:
{"sub":"1234567890","name":"John Doe","iat":1516239022}
L’header è sempre scritto come {"alg":"HS256","typ":"JWT"} seguito dai campi extra aggiunti; alg segue sempre l’algoritmo scelto.
Buone pratiche
Mantieni i token di breve durata con una claim exp e imposta iss e aud così che un token per un servizio non possa essere riutilizzato su un altro. Sul server verifica sempre la firma con un elenco esplicito di algoritmi ammessi e rifiuta none. I segreti HMAC devono essere lunghi e casuali, almeno quanto l’output dell’hash (32 byte per HS256).
Domande frequenti
› Quale algoritmo scegliere?
Quello che verifica il tuo server. HS256 usa un segreto condiviso ed è comune all’interno di un unico sistema. RS256 ed ES256 firmano con una chiave privata e chiunque può verificare con la chiave pubblica, adatto a token controllati da più servizi. ES256 produce firme molto più corte di RS256.
› Quali formati di chiave privata sono accettati?
Chiavi PEM in PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 RSA (BEGIN RSA PRIVATE KEY) e SEC1 EC (BEGIN EC PRIVATE KEY). Le chiavi cifrate vanno prima esportate senza passphrase. Per ES256, ES384 ed ES512 la chiave deve essere rispettivamente sulla curva P-256, P-384 o P-521.
› Il payload di un JWT è segreto?
No. Header e payload sono solo codificati in Base64URL e chiunque abbia il token può leggerli. La firma impedisce le modifiche, non la lettura. Non mettere mai password o altri segreti nel payload di un JWT.
› Il mio segreto o la chiave privata vengono salvati o inviati?
No. La firma avviene nel browser tramite la Web Crypto API. Il segreto o la chiave restano solo nella memoria di questa pagina: non vengono salvati, non finiscono nella barra degli indirizzi né nei link di condivisione. Evita comunque di incollare chiavi di produzione in pagine web che non controlli.