Codificatore di JWT (generazione e firma)

Strumento per sviluppatori che, a partire dall'intestazione e dal contenuto in JSON, genera all'istante un gettone JWT firmato con HMAC secondo gli algoritmi HS256, HS384 o HS512. Nulla di quanto inserite, chiave segreta compresa, viene trasmesso a un servente: tutto avviene nel navigatore.

Gli algoritmi di firma HMAC previsti

Algoritmo Funzione di sintesi Lunghezza della firma Descrizione
HS256 SHA-256 256 bit (32 byte) La firma HMAC più diffusa, supportata praticamente da ogni libreria per i gettoni JWT. Tenete presente che per i gettoni di identità di OpenID Connect l'algoritmo obbligatorio e predefinito è RS256, a chiave pubblica; lì HS256 è solo facoltativo.
HS384 SHA-384 384 bit (48 byte) Scelta intermedia per chi desidera un margine di sicurezza maggiore con una firma più lunga di quella di HS256.
HS512 SHA-512 512 bit (64 byte) La firma più lunga, che si usa di norma insieme a una chiave segreta casuale sufficientemente estesa.

Creare e firmare un JWT

Questo strumento assembla sul momento un JWT a partire dal JSON dell'intestazione e del carico utile, firmandolo con HMAC mediante HS256, HS384 o HS512. Tutto ciò che inserite, la chiave segreta compresa, viene trattato nel solo browser e non è mai inviato a un server.

Ciò che qui più spesso si fraintende è che la firma serve a rilevare manomissioni e non è una cifratura. L'intestazione e il carico utile di un JWT sono soltanto codificati in Base64URL, sicché chiunque abbia il token può leggerne il contenuto senz'altro. Ecco perché password e dati personali non hanno posto in un carico utile. L'altro punto riguarda la natura della chiave: la famiglia HS si regge sul fatto che chi firma e chi verifica condividano lo stesso segreto. Se la verifica va affidata altrove, vorrete un procedimento a chiave pubblica come RS256 o ES256, che vi risparmia di consegnare il segreto.

Come crearne uno

  1. Inserite il JSON dell'intestazione Ha la forma {"alg":"HS256","typ":"JWT"}. Tenetelo in accordo con l'algoritmo scelto.
  2. Inserite il JSON del carico utile Scrivetevi le rivendicazioni che vi occorrono, come sub, iat ed exp. Lasciate fuori tutto ciò che deve restare segreto.
  3. Scegliete l'algoritmo di firma Sono disponibili HS256, HS384 e HS512; il numero indica la lunghezza in bit dell'impronta.
  4. Fornite il segreto e raccogliete il token Ne esce una stringa di tre parti unite da punti.

Consigli per sfruttarlo al meglio

  • Il gettone è firmato soltanto dall'interfaccia crittografica del navigatore e nulla di quanto inserite, chiave segreta compresa, giunge ai serventi di toolbase.cc.
  • Cambiando algoritmo di firma, il campo alg dell'intestazione JSON si riscrive da sé. Per aggiungere altri parametri dell'intestazione, come kid (identificativo della chiave), modificate direttamente l'intestazione.
  • Lo strumento prevede soltanto il metodo HMAC, cioè a chiave condivisa. Se vi occorre una firma a chiave pubblica come RS256 o ES256, usate una libreria dal lato del servente.
  • Dopo aver modificato intestazione o contenuto, premete di nuovo il pulsante di generazione: fino ad allora resterà visibile il gettone prodotto con il contenuto precedente.
  • Per esaminare subito il gettone generato, incollatelo nello strumento affine, il decodificatore di JWT, che ne mostrerà intestazione e contenuto.

Quando torna utile

Nel provare il comportamento di un'API

Poter coniare un token con le rivendicazioni che si vogliono rende spedito il percorrere i rami di una regola di autorizzazione.

Nel verificare come sia trattata la scadenza

Create un token il cui exp cada nel passato e accertate che un token scaduto venga respinto come si conviene.

Nel preparare token per le prove

Potete produrre un token dal contenuto fisso che faccia da materiale in una prova automatizzata.

Nell'apprendere la struttura di un JWT

Generare più volte variando l'ingresso lascia vedere in quale punto del token finisca ciascun pezzo.

Termini del JWT

Intestazione
La prima parte, che dichiara l'algoritmo e il tipo. Porta alg e typ.
Carico utile
La seconda parte, che ospita le rivendicazioni. È soltanto codificata in Base64URL e non è in alcun modo cifrata.
Firma
La terza parte, calcolata da intestazione e carico utile con una chiave. Serve a rilevare manomissioni e nulla fa per celare il contenuto.
Rivendicazione
Ciascuna voce entro il carico utile. Fra quelle standard figurano sub per il soggetto, iat per l'ora di emissione ed exp per la scadenza.
HMAC
Un procedimento di autenticazione dei messaggi a chiave condivisa. Tanto chi firma quanto chi verifica devono possedere lo stesso segreto.
Base64URL
Base64 con i simboli sostituiti per poter viaggiare in una URL: + e / diventano - e _, e il riempimento finale viene tolto.

Domande frequenti

No, è sconsigliato. La firma in sé avviene in sicurezza nel navigatore, ma è l'atto stesso di inserirvi una chiave segreta a non essere una buona pratica di sicurezza per l'esercizio. Lo strumento è pensato per le prove durante lo sviluppo e per lo studio.

HS256 è un metodo a chiave condivisa, cioè simmetrico, in cui mittente e destinatario possiedono la stessa chiave; RS256 è un metodo a chiave pubblica, cioè asimmetrico, in cui si firma con la chiave privata e si verifica con quella pubblica. Questo strumento prevede soltanto i metodi HMAC — HS256, HS384 e HS512 — e non quelli a chiave pubblica.

Sì, l'intestazione JSON è liberamente modificabile. Se però l'algoritmo scelto, cioè quello realmente usato nel calcolo della firma, non coincide con il valore del campo alg, la verifica del gettone in un'altra realizzazione può fallire: fate sempre in modo che i due coincidano.

Incollando la stringa nello strumento affine, il decodificatore di JWT, potete esaminarne subito intestazione e contenuto. La validità della firma in sé, però, si accerta in modo definitivo soltanto con la logica di verifica del servente che possiede quella chiave segreta.
Tool-kun

A proposito — perché la firma di un JWT può avvenire soltanto nel navigatore

Gli algoritmi di firma dei JWT si dividono grosso modo in quelli a chiave condivisa, cioè HMAC nelle varianti HS256, HS384 e HS512, e in quelli a chiave pubblica, come RS256 ed ES256, in cui si firma con la chiave privata e si verifica con quella pubblica. I primi si calcolano interamente nel navigatore, senza alcuna libreria esterna, servendosi dell'interfaccia crittografica standardizzata dal consorzio del web: per questo lo strumento si limita di proposito al metodo HMAC.

La sicurezza di una firma HMAC dipende interamente dalla difficoltà di indovinare la chiave segreta, non dal contenuto dell'intestazione o del corpo. La norma sugli algoritmi dei gettoni web (RFC 7518) impone come obbligatoria (MUST) per HS256 una chiave di almeno 256 bit, cioè 32 byte: usare una parola breve o una stringa presente nei dizionari espone al rischio che la firma venga contraffatta con un attacco esaustivo. In esercizio si deve usare una stringa casuale sufficientemente lunga, prodotta da un generatore di numeri casuali.

Questo strumento è un'utilità per sviluppatori, pensata per le prove durante lo sviluppo di un'interfaccia e per collaudare la logica di verifica delle firme dei richiami web. La chiave inserita resta nella memoria del navigatore e non viene trasmessa all'esterno, ma il rischio che un dispositivo condiviso o un'estensione del navigatore raccolgano gli appunti o quanto digitate non è mai nullo: si raccomanda vivamente di non inserire in strumenti di questo genere, nemmeno per prova, la chiave usata realmente in produzione.