Skip to content

Generatore di segreti JWT — HS256/384/512

Genera online un segreto JWT robusto e conforme alle RFC per HS256/384/512 — 100% nel tuo browser, mai inviato a un server. base64url, base64 o hex.

Niente tracciamento Funziona nel browser Gratuito
Il tuo segreto è generato localmente con crypto.getRandomValues e non viene mai caricato, registrato o memorizzato. Resta su questo dispositivo.
16 64

Comandi CLI equivalenti

Verificato per la correttezza della lunghezza della chiave secondo RFC 7518 §3.2, l'accuratezza delle codifiche RFC 4648 tra base64url / base64 / hex, la provenienza CSPRNG (crypto.getRandomValues, mai Math.random), la privacy senza rete e senza memorizzazione del segreto generato e l'accessibilità (controlli etichettati, mascheramento mostra/nascondi, annunci per screen reader alla generazione e alla copia). — Team Strumenti di Sicurezza di Go Tools · Jun 16, 2026

Cos'è un generatore di segreti JWT?

Un generatore di segreti JWT produce la chiave di firma casuale che un JSON Web Token firmato tramite HMAC usa per dimostrare di non essere stato manomesso. Quando firmi un token con HS256, HS384 o HS512, l'algoritmo esegue HMAC sull'header e sul payload del token usando un singolo segreto condiviso; il verificatore ricalcola lo stesso HMAC con lo stesso segreto e accetta il token solo se le firme coincidono. L'intera sicurezza di questo schema poggia sul fatto che il segreto sia lungo e imprevedibile — che è esattamente ciò che questo strumento crea: una stringa casuale ad alta entropia, generata nel tuo browser, dimensionata correttamente per l'algoritmo che scegli.

Vale la pena essere precisi su ciò che questo strumento fa e non fa. Genera la chiave segreta — il valore che metti nella tua variabile d'ambiente JWT_SECRET — non un token finito. Se vuoi assemblare un header e un payload e firmarli in un JWT reale, è il compito del Codificatore JWT; per smontare un token esistente e verificarne la firma, usa il Decodificatore JWT. Pensa al segreto come alla chiave e al codificatore come alla serratura che essa aziona: generi la chiave una volta, la conservi al sicuro e la riutilizzi per firmare e verificare molti token.

Quanto deve essere lunga la chiave? La risposta è fissata dalla specifica, non dalle preferenze. La RFC 7518 §3.2 — lo standard JSON Web Algorithms — richiede che una chiave HMAC sia almeno grande quanto l'output di hash: "A key of the same size as the hash output (for instance, 256 bits for HS256) or larger MUST be used." Questo dà una tabella pulita che il generatore segue automaticamente:

| Algorithm | HMAC | Min bytes | Min bits | hex chars | base64 chars | base64url chars | |-----------|------|-----------|----------|-----------|--------------|-----------------| | HS256 | HMAC-SHA-256 | 32 | 256 | 64 | 44 | 43 | | HS384 | HMAC-SHA-384 | 48 | 384 | 96 | 64 | 64 | | HS512 | HMAC-SHA-512 | 64 | 512 | 128 | 88 | 86 |

I conteggi dei caratteri derivano dalle codifiche RFC 4648 di quelle lunghezze in byte: hex raddoppia il conteggio dei byte; base64 si espande di 4⁄3 con il padding; base64url elimina il padding, così una chiave di 32 byte è di 43 caratteri base64url anziché 44. base64url è la codifica nativa di JWT — alfabeto URL-safe, nessun padding — ed è per questo che è l'output predefinito qui; un segreto in base64url può stare in un header, in un URL o in un valore di configurazione senza escaping.

La casualità è la parte su cui non puoi scendere a compromessi. Questo generatore estrae i suoi byte da crypto.getRandomValues, il generatore di numeri pseudo-casuali crittograficamente sicuro del browser, la stessa primitiva che sta dietro la generazione di chiavi di Web Crypto. Non usa mai Math.random, che è veloce ma prevedibile e del tutto inadatto a una chiave di firma — un RNG prevedibile significa un segreto indovinabile, e un segreto indovinabile significa token forgiabili. Poiché la verifica HMAC avviene localmente con il segreto condiviso, un attaccante che cattura un token può forzare una chiave debole offline senza alcun rate limit; strumenti come hashcat (modalità 16500) e jwt_tool esistono proprio per fare questo. Una chiave casuale di 32 byte a piena entropia, invece, è computazionalmente fuori portata. La lezione è netta: non usare mai una password, una parola di dizionario o una stringa digitata a mano come segreto JWT — generane uno casuale.

Infine, generare la chiave lato client è di per sé una proprietà di sicurezza. Un segreto di firma non dovrebbe mai essere trasmesso a una terza parte, nemmeno al sito che ti aiuta a crearlo. Ogni byte qui viene prodotto e codificato nel tuo browser; nulla viene caricato, registrato o memorizzato. Quando sei pronto a distribuire la chiave, il pulsante Copia per .env ti consegna una riga JWT_SECRET=…, e se hai bisogno di inserirla in una configurazione più ampia il convertitore JSON to .env può aiutarti. Genera, copia, conservala in un gestore di segreti — e ruotala con un header kid e finestre di validità sovrapposte quando arriva il momento.

// The secret you generate here goes straight into your signing code.
// Node.js with jsonwebtoken — the JWT_SECRET env var holds the key.
import jwt from 'jsonwebtoken';

const secret = process.env.JWT_SECRET; // e.g. base64url value from this tool

// Sign a token with HS256 (HMAC-SHA-256).
const token = jwt.sign({ sub: 'user-42', role: 'member' }, secret, {
  algorithm: 'HS256',
  expiresIn: '15m'
});

// Verify it — pin the algorithm to a whitelist; never trust the token's alg.
const payload = jwt.verify(token, secret, { algorithms: ['HS256'] });

// ---------------------------------------------------------------
// Python with PyJWT — same secret, same algorithm pinning.
// import jwt
// token = jwt.encode({"sub": "user-42"}, key, algorithm="HS256")
// payload = jwt.decode(token, key, algorithms=["HS256"])  # whitelist!

// ---------------------------------------------------------------
// Equivalent-strength CLI generation (32 bytes for HS256):
//   openssl rand -base64 32
//   node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
//   python -c "import secrets; print(secrets.token_urlsafe(32))"

Caratteristiche principali

Lunghezza della chiave consapevole dell'algoritmo

Scegli HS256, HS384 o HS512 e il generatore imposta automaticamente la dimensione minima della chiave della RFC 7518 §3.2 — 32, 48 o 64 byte. Puoi richiedere una chiave più lunga, ma non puoi mai predisporre per errore una chiave sottodimensionata che viola la specifica o che una libreria rigorosa si rifiuterà di firmare.

Tre formati di output sicuri per il testo

Ottieni gli stessi byte casuali come base64url (la codifica nativa, URL-safe e senza padding di JWT — il valore predefinito), base64 standard o hex, mostrati affiancati. base64url è il valore predefinito più sicuro per un JWT_SECRET; cambia formato quando un loader o una libreria specifici ne richiedono un altro. L'entropia è identica tra tutti e tre.

Casualità crittograficamente sicura

Ogni segreto è estratto da crypto.getRandomValues, il CSPRNG del browser e la primitiva dietro la generazione di chiavi di Web Crypto. Mai Math.random. Questo garantisce una chiave a piena entropia senza struttura prevedibile — la proprietà che pone il segreto oltre la portata del brute-force offline.

Copia per .env con un clic

Copia per .env racchiude il valore nella consueta assegnazione JWT_SECRET=…, una riga, senza virgolette — pronta da incollare in un file .env, un Docker secret o una variabile CI senza digitare a mano il nome della chiave. Copia semplice prende il segreto grezzo quando ti serve solo il valore.

Comandi CLI equivalenti

Un pannello stampa le corrispondenti one-liner openssl rand, Node crypto.randomBytes e Python secrets per l'algoritmo selezionato, così puoi riprodurre una chiave di pari robustezza in uno script di provisioning o in un Dockerfile. La maggior parte degli strumenti concorrenti lo omette; qui è integrato.

Mascheramento mostra / nascondi

Il segreto è mascherato per impostazione predefinita così resta fuori dallo schermo durante una demo, un tutorial o una condivisione schermo. Rivelalo con l'icona dell'occhio solo quando sei pronto a copiarlo. Le azioni di copia mettono sempre il segreto reale negli appunti, sia che sia mostrato sia che sia nascosto.

100% privato, solo nel browser

Il segreto viene generato, codificato e visualizzato interamente sul tuo dispositivo. Nessuna richiesta di rete, nessun log, nessuna memorizzazione — verificalo in DevTools → Network. Una chiave di firma non dovrebbe mai raggiungere una terza parte, e qui non accade mai, che è l'intera ragione per generarla lato client.

Disponibile in 15 lingue

L'intera interfaccia — etichette, istruzioni e indicazioni — è localizzata in 15 lingue, così lo strumento è utilizzabile e i consigli di sicurezza sono chiari ovunque lavori il tuo team.

Esempi pratici

Genera un segreto HS256 in base64url (il valore predefinito)

Algorithm: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

HS256 firma con HMAC-SHA-256, quindi la RFC 7518 §3.2 richiede una chiave di almeno 32 byte (256 bit). Il generatore estrae 32 byte casuali e crittograficamente sicuri da crypto.getRandomValues e li codifica in base64url — l'alfabeto URL-safe e senza padding che JWT stesso usa. 32 byte diventano una stringa base64url di 43 caratteri. Inserisci il valore direttamente in JWT_SECRET. Ogni clic rigenera un nuovo segreto; nulla è mai uguale due volte.

Genera un segreto HS512 (64 byte / 512 bit)

Algorithm: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)

HS512 usa HMAC-SHA-512, il cui output di hash è di 64 byte, quindi la RFC 7518 §3.2 impone una chiave di almeno 64 byte (512 bit). Lo strumento rileva l'algoritmo e aumenta automaticamente il numero di byte — non devi mai ricordare il minimo. 64 byte casuali si codificano in una stringa base64url di 86 caratteri, 88 caratteri in base64 standard o 128 caratteri hex. Scegliere qui un algoritmo più lungo è il modo con un clic per predisporre un segreto a entropia più elevata.

Copia il segreto come riga .env

Click "Copy for .env"
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

Copia per .env racchiude il valore generato nella consueta assegnazione JWT_SECRET=… così puoi incollarlo direttamente in un file .env, un Docker secret o una variabile CI senza digitare a mano il nome della chiave. Il valore resta su una sola riga, senza virgolette — esattamente ciò che i loader in stile dotenv si aspettano. Hai bisogno della variabile inserita in una configurazione più ampia? Abbinalo al convertitore JSON to .env collegato qui sotto.

Riproduci il segreto da una CLI (stessa robustezza)

Show the CLI command
openssl rand -base64 32

Il pannello CLI stampa i comandi openssl, Node e Python che estraggono lo stesso numero di byte casuali sicuri per l'algoritmo selezionato — openssl rand -base64 32 per HS256, …48 per HS384, …64 per HS512. L'output è un segreto di pari robustezza, non una stringa identica byte per byte: openssl emette base64 standard con padding mentre questo strumento usa per impostazione predefinita base64url, quindi gli alfabeti e i caratteri finali differiscono. Usa quello che si adatta al tuo script di provisioning; l'entropia è la stessa.

Mostra e nascondi il segreto

Toggle the eye icon
•••••••••••••••••••••••••••••••••••••••••••  ↔  3sJ9aFq2kP7m…

Il segreto è mascherato per impostazione predefinita così non può essere sbirciato alle spalle o catturato da una registrazione dello schermo durante una demo o una condivisione schermo. Fai clic sull'icona dell'occhio per rivelarlo quando sei pronto a copiarlo, e nascondilo di nuovo dopo. Copia e Copia per .env funzionano sia che il valore sia mostrato sia che sia mascherato — il segreto reale è sempre ciò che finisce nei tuoi appunti, mai i puntini.

Come usare il generatore di segreti JWT

  1. 1

    Scegli l'algoritmo di firma

    Seleziona HS256, HS384 o HS512. Il generatore applica all'istante la lunghezza minima della chiave della RFC 7518 §3.2 per quella variante HMAC — 32, 48 o 64 byte — così non devi mai cercare il numero né rischi una chiave sottodimensionata.

  2. 2

    Scegli il formato di output

    base64url è il valore predefinito — la codifica nativa, URL-safe e senza padding di JWT. Passa a base64 standard se un loader lo richiede, o a hex quando un sistema accetta solo i caratteri 0–f. Tutti e tre codificano gli stessi byte casuali con entropia identica.

  3. 3

    Rivela e copia il segreto

    Il segreto è mascherato per impostazione predefinita per tenerlo fuori dallo schermo durante una demo o una condivisione schermo. Fai clic sull'icona dell'occhio per rivelarlo, poi Copia per prendere il valore grezzo o Copia per .env per copiare una riga JWT_SECRET=… pronta per un file .env o una variabile CI.

  4. 4

    Rigenera all'occorrenza

    Fai clic su Rigenera per un segreto nuovo e indipendente estratto da crypto.getRandomValues. Generane uno per ogni ambiente — non riutilizzare mai la stessa chiave di firma tra sviluppo, staging e produzione.

  5. 5

    Usa l'equivalente CLI o passa alla firma

    Il pannello CLI mostra le corrispondenti one-liner openssl, Node e Python per il provisioning tramite script. Con il tuo segreto in mano, firma un token con il Codificatore JWT e conferma la firma con il Decodificatore JWT.

Errori comuni con i segreti JWT

Usata una password o una frase breve come segreto

Una stringa scelta da un essere umano ha troppa poca entropia per una chiave di firma e può essere recuperata offline con un attacco a dizionario o brute-force, dopodiché qualsiasi token può essere forgiato. Genera invece un segreto casuale a piena entropia.

✗ Errato
JWT_SECRET=mySuperSecret123  →  low entropy, brute-forceable
✓ Corretto
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0  →  32 random bytes

Chiave più corta di quanto richiede l'algoritmo

La RFC 7518 §3.2 impone una chiave HMAC lunga almeno quanto l'output di hash. Una chiave di 16 byte per HS256 è sotto la soglia di 32 byte — indebolisce la firma e alcune librerie la rifiutano del tutto.

✗ Errato
16-byte key with HS256  →  below the 32-byte minimum
✓ Corretto
32-byte key with HS256  →  meets RFC 7518 §3.2

Generata la chiave con Math.random

Math.random non è crittograficamente sicuro — il suo output è prevedibile, quindi un segreto costruito a partire da esso è indovinabile e i token che firma sono forgiabili. Una chiave di firma deve provenire da un CSPRNG come crypto.getRandomValues.

✗ Errato
Math.random()-based key  →  predictable, unsafe
✓ Corretto
crypto.getRandomValues key  →  full entropy

Ricodificato il segreto prima di firmare

Conserva e fornisci la stringa esatta prodotta dallo strumento. Decodificarla in base64 in byte in un servizio ma trattarla come stringa letterale in un altro dà ai due lati chiavi diverse, e ogni controllo di firma fallisce.

✗ Errato
Service A: raw string · Service B: base64-decoded  →  signatures never match
✓ Corretto
Both services use the identical stored string  →  signatures verify

Riutilizzato lo stesso segreto in tutti gli ambienti

Un solo JWT_SECRET condiviso da dev, staging e produzione significa che una fuga ovunque forgia token ovunque e la rotazione diventa tutto-o-niente. Predisponi un segreto distinto per ogni ambiente.

✗ Errato
Same JWT_SECRET in dev, staging, prod  →  one leak breaks all
✓ Corretto
A unique secret per environment  →  blast radius contained

Fidato dell'alg del token in fase di verifica

Lasciare che il verificatore accetti qualunque algoritmo dichiari il token abilita le forgiature alg:none e di confusione HS/RS. Passa una whitelist esplicita di algoritmi per quanto robusto sia il segreto.

✗ Errato
jwt.verify(token, secret)  →  accepts the token's alg
✓ Corretto
jwt.verify(token, secret, { algorithms: ['HS256'] })  →  pinned

Chi usa questo strumento

Predisponi un JWT_SECRET per un nuovo servizio
Stai avviando un'API che emette token firmati tramite HMAC? Scegli l'algoritmo usato dalla tua libreria, copia il segreto come riga JWT_SECRET=… e inseriscilo nell'ambiente del servizio. Genera una chiave distinta per sviluppo, staging e produzione — non condividere mai un solo segreto tra gli ambienti.
Ruota un segreto compromesso o datato
Quando una chiave è sospettata trafugata o semplicemente da rinnovare, genera qui un nuovo segreto, assegnagli un nuovo kid e distribuiscilo con una finestra di sovrapposizione così i token attivi continuano a verificarsi finché non scadono. In caso di compromissione confermata, ruota immediatamente e rimuovi la vecchia chiave dall'insieme accettato.
Sostituisci una chiave debole o digitata a mano
Hai ereditato una codebase il cui JWT_SECRET è una frase breve o un valore di esempio copiato? Quella chiave è forzabile offline. Genera una sostituzione casuale di 32 byte a piena entropia, sostituiscila dietro una finestra di rotazione e chiudi la falla di forgiatura dei token prima che venga sfruttata.
Genera la chiave tramite script in una pipeline
Hai bisogno che la chiave venga creata in CI o in un Dockerfile anziché a mano? Usa la one-liner openssl, Node o Python del pannello CLI per coniare un segreto di pari robustezza all'interno del tuo script di provisioning, e usa questa pagina per capire le lunghezze in byte e le codifiche che ogni comando produce.
Insegna la firma JWT in sicurezza
Guida un team attraverso il funzionamento di HS256 senza mai esporre una vera chiave di produzione — genera un segreto usa e getta sullo schermo (mascherato finché non lo riveli), firma un token di esempio con il Codificatore JWT e verificalo con il Decodificatore JWT così l'intero ciclo di firma e verifica è visibile.
Confronta le dimensioni delle chiavi HS256, HS384 e HS512
Stai decidendo su quale variante HMAC standardizzarti? Passa tra gli algoritmi per vedere come crescono la lunghezza della chiave richiesta e la stringa codificata — 43, 64 e 86 caratteri base64url — e scegli il compromesso robustezza-dimensione del token che si adatta al tuo sistema prima di fissarlo nella configurazione.
Genera chiavi per lo sviluppo locale
Hai bisogno di un segreto rapido e valido per far funzionare un flusso di autenticazione locale? Generane uno con un clic, copialo per .env e sei sbloccato — con una vera chiave CSPRNG anziché un segnaposto che dimenticherai di sostituire prima del deploy.

Come funziona il generatore

crypto.getRandomValues (CSPRNG)
I segreti sono generati riempiendo un Uint8Array con crypto.getRandomValues, il generatore di numeri pseudo-casuali crittograficamente sicuro di Web Crypto. È la stessa fonte di entropia che sta dietro la generazione di chiavi di Web Crypto. Math.random non viene mai usato da nessuna parte — è statisticamente prevedibile e inadatto a qualsiasi chiave crittografica.
Dimensionamento delle chiavi RFC 7518 §3.2
Il conteggio dei byte per algoritmo segue il requisito di JSON Web Algorithms secondo cui una chiave HMAC sia almeno della dimensione dell'output di hash: 32 byte per HS256 (SHA-256), 48 per HS384 (SHA-384), 64 per HS512 (SHA-512). Selezionare l'algoritmo imposta il minimo; il generatore non emetterà una chiave sotto la soglia della specifica.
Codifiche RFC 4648 (base64url / base64 / hex)
I byte grezzi sono codificati con gli alfabeti RFC 4648. base64url usa l'alfabeto URL-safe senza padding (32 byte → 43 caratteri), base64 standard usa il padding +, / e = (→ 44 caratteri), e hex scrive due caratteri per byte (→ 64 caratteri). Cambiare formato ricodifica gli stessi byte — l'entropia sottostante è invariata.
Perché base64url è il valore predefinito
I componenti JWT sono essi stessi codificati in base64url, e l'alfabeto URL-safe senza padding significa che un segreto in base64url non ha mai bisogno di escaping in un header, in un URL o in un file di configurazione. Il +, il / e il = finale di base64 standard possono creare problemi in quei contesti, quindi base64url è il valore predefinito conservativo per un JWT_SECRET.
Formattazione di Copia per .env
Copia per .env emette JWT_SECRET= su una singola riga senza virgolette — la forma che i loader in stile dotenv analizzano senza modifiche. Il segreto grezzo non include mai caratteri che richiederebbero virgolette in un file .env, quindi la riga è sicura da incollare così com'è.
Comandi CLI di pari robustezza, non identici byte per byte
I comandi openssl rand -base64 N, Node randomBytes(N).toString('base64url') e Python secrets.token_urlsafe(N) del pannello CLI estraggono tutti N byte casuali sicuri per l'algoritmo scelto. Producono chiavi di pari robustezza, non la stessa stringa — openssl emette base64 standard con padding, quindi l'alfabeto e i caratteri finali differiscono dal valore predefinito base64url di questo strumento.

Buone pratiche per i segreti JWT

Adatta la lunghezza della chiave all'algoritmo
Usa almeno 32 byte per HS256, 48 per HS384 e 64 per HS512, come richiede la RFC 7518 §3.2. Questo generatore lo fa per te, ma se dimensioni una chiave a mano, non scendere mai sotto la lunghezza dell'output di hash — una chiave HMAC sottodimensionata indebolisce la firma e può essere rifiutata da librerie rigorose.
Genera sempre con un CSPRNG, mai una password
Un segreto JWT è una credenziale da macchina che nessuno deve memorizzare, quindi spendi l'intera entropia: usa una chiave casuale crittograficamente sicura, non una passphrase, una parola di dizionario o una stringa digitata a mano. I segreti scelti dagli esseri umani sono il bersaglio più facile per gli attacchi brute-force offline che gli strumenti di cracking JWT automatizzano.
Usa un segreto unico per ogni ambiente
Sviluppo, staging e produzione dovrebbero avere ciascuno il proprio JWT_SECRET. Condividere una sola chiave significa che una fuga in un ambiente a basso rischio forgia token ovunque, e rende la rotazione tutto-o-niente. Genera qui un segreto separato per ogni ambiente e conserva ciascuno nel proprio ambito del gestore di segreti.
Fissa l'algoritmo quando verifichi
Sul lato della verifica, passa sempre una whitelist esplicita di algoritmi — algorithms: ['HS256'] in jsonwebtoken, algorithms=["HS256"] in PyJWT — e non fidarti mai del campo alg all'interno del token. Accettare l'algoritmo auto-dichiarato dal token abilita i classici attacchi di forgiatura alg-confusion e alg:none, indipendentemente da quanto sia robusto il tuo segreto.
Ruota con un header kid e chiavi sovrapposte
Etichetta i token firmati con un identificatore di chiave (kid) e pubblica le chiavi attive tramite un endpoint JWKS così puoi ruotare senza downtime: firma i nuovi token con la nuova chiave continuando ad accettare la vecchia finché i suoi token non scadono. In caso di sospetta compromissione, salta la sovrapposizione e revoca immediatamente la vecchia chiave.

Domande frequenti

Il mio segreto JWT generato viene inviato al vostro server?
No. Il segreto viene generato interamente nel tuo browser con crypto.getRandomValues, il generatore di numeri casuali crittograficamente sicuro della piattaforma. I byte vengono prodotti sul tuo dispositivo, codificati localmente e mostrati solo a te. Nulla viene caricato, nulla viene registrato, nulla viene scritto su disco e nulla viene inviato a terze parti — apri DevTools → Network e vedrai partire zero richieste quando fai clic su Rigenera o Copia. Significa che una chiave che generi qui è solo tua nell'istante in cui appare; nessun server la osserva mai. È proprio questo il senso di generare un segreto di firma lato client anziché su un sito web che potrebbe, in linea di principio, conservare una copia di ogni chiave che distribuisce.
Come genero un segreto JWT sicuro?
Tre passaggi. Primo, scegli l'algoritmo di firma usato dalla tua applicazione — HS256, HS384 o HS512 — e il generatore dimensiona immediatamente la chiave al minimo della RFC 7518 §3.2 per quella variante (32, 48 o 64 byte), così non scegli mai a mano un numero né rischi una chiave sottodimensionata. Secondo, lascia la codifica su base64url (il formato nativo e URL-safe di JWT) oppure passa a base64 o hex se il tuo loader di configurazione ne richiede uno. Terzo, fai clic su Copia — o Copia per .env per ottenere una riga JWT_SECRET=… pronta da incollare — e conserva il valore in un gestore di segreti o in una variabile d'ambiente, mai nel controllo di versione. Poiché ogni byte proviene da crypto.getRandomValues, una chiave di 32 byte porta già 256 bit di entropia, ben oltre la portata degli attacchi brute-force offline che violano i segreti scelti dagli esseri umani. Preferisci la riga di comando? Lo strumento stampa anche le equivalenti one-liner openssl, Node e Python da incollare in un terminale.
Quanto deve essere lungo un segreto JWT HS256?
Almeno 32 byte (256 bit). La RFC 7518 §3.2 — la specifica JSON Web Algorithms — stabilisce che per le firme HMAC "a key of the same size as the hash output (for instance, 256 bits for HS256) or larger MUST be used." HS256 firma con HMAC-SHA-256 (hash a 256 bit), quindi la chiave minima è di 32 byte; HS384 usa HMAC-SHA-384 e richiede almeno 48 byte (384 bit); HS512 usa HMAC-SHA-512 e richiede almeno 64 byte (512 bit). Questo generatore sceglie automaticamente il minimo corretto quando selezioni l'algoritmo, e puoi richiedere una chiave più lunga. Una chiave più corta non è solo più debole — viola la specifica e alcune librerie si rifiutano di firmare con essa.
Qual è la differenza tra base64url, base64 e hex, e quale dovrei scegliere?
Tutti e tre codificano gli stessi byte casuali; differiscono solo nell'alfabeto dei caratteri, non nell'entropia. base64url è la codifica nativa di JWT — usa un alfabeto URL-safe (- e _ al posto di + e /) e omette il padding, così non ha mai bisogno di escaping in un token, in un URL o in un header. È per questo che è il valore predefinito qui. base64 standard usa +, / e il padding =; sceglilo quando un loader di configurazione o una libreria richiede specificamente il base64 classico. hex (base16) scrive ogni byte come due caratteri 0–f, producendo una stringa più lunga ma non ambigua, utile quando un sistema rifiuta i caratteri non alfanumerici. Per una variabile d'ambiente JWT_SECRET, base64url è il valore predefinito più sicuro; uno qualsiasi dei tre va bene purché tu conservi la stringa esatta e la restituisca invariata alla tua libreria di firma.
Un segreto JWT debole può essere violato?
Sì — ed è il singolo rischio più grande con i JWT firmati tramite HMAC. Poiché HS256/384/512 usano un solo segreto condiviso, chiunque possieda un token può eseguire un attacco brute-force o a dizionario offline contro la firma senza alcun rate limit e senza contatto con il server. Strumenti come hashcat (la modalità 16500 prende di mira JWT) e jwt_tool sono costruiti apposta per questo; su GPU comuni un segreto a bassa entropia può tipicamente cadere in secondi o ore, e una parola di dizionario o una password trafugata possono cadere quasi immediatamente. Una chiave casuale di 32 byte a piena entropia di questo generatore è ben oltre la portata del brute force. Una volta che un attaccante recupera il segreto può forgiare qualsiasi token — incluso uno che rivendica privilegi di amministratore — quindi la robustezza del segreto non è opzionale. Genera la chiave di firma con un CSPRNG, mai una stringa scelta da un essere umano. Per una trattazione più approfondita degli attacchi con segreti deboli, di alg-confusion e di token-replay, vedi la nostra guida alle migliori pratiche di sicurezza JWT.
Posso usare una password come segreto JWT?
Puoi, ma non dovresti. Una password memorizzabile da un essere umano — anche una lunga passphrase — porta molta meno entropia di 32 byte casuali, il che la rende un bersaglio realistico per gli attacchi brute-force e a dizionario offline descritti sopra. I segreti JWT sono credenziali da macchina a macchina; nessuno deve memorizzarli, quindi non c'è ragione di barattare entropia per memorabilità. Genera qui un segreto casuale, conservalo in un gestore di segreti o in una variabile d'ambiente, e lascia che la tua applicazione lo legga. Se hai bisogno di credenziali memorabili per un altro scopo, è un lavoro per un Generatore di password o, per memorizzare le password degli utenti, per un hash a senso unico del Generatore bcrypt — non per una chiave di firma di token.
Come ruoto un segreto JWT senza rompere i token attivi?
Ruota con sovrapposizione anziché con un cambio netto. Aggiungi un identificatore di chiave (l'header kid) ai token che firmi così un verificatore sa con quale segreto confrontarli, e pubblica le tue chiavi attive — tipicamente tramite un endpoint JWKS che i tuoi servizi leggono. Per ruotare: genera qui un nuovo segreto, inizia a firmare i nuovi token con il nuovo kid pur continuando ad accettare la chiave precedente per la verifica, e ritira la vecchia chiave solo dopo che ogni token firmato con essa è scaduto. Quella finestra di sovrapposizione fa sì che nessuna sessione valida venga invalidata a metà. In caso di sospetta compromissione, salta la sovrapposizione graziosa: ruota immediatamente, rimuovi la vecchia chiave dall'insieme accettato e forza una nuova autenticazione così i token trafugati smettono subito di verificarsi.
In cosa differisce una chiave HMAC (HS*) da una chiave RSA o ECDSA (RS*/ES*)?
Risolvono lo stesso problema con modelli di chiave opposti. HS256/384/512 sono algoritmi HMAC: usano un solo segreto simmetrico — il tipo che questo strumento genera — che sia firma sia verifica, quindi ogni parte in grado di verificare un token può anche forgiarne uno. È semplice e veloce e ideale quando un singolo servizio sia emette sia controlla i propri token. RS* (RSA) e ES* (ECDSA) sono asimmetrici: usano una coppia di chiavi, in cui una chiave privata firma e una chiave pubblica separata solo verifica. Consegni la chiave pubblica a chiunque debba convalidare i token senza mai esporre la chiave di firma — la scelta giusta quando un identity provider emette token che molti servizi indipendenti verificano. Questo generatore produce solo segreti simmetrici HMAC. Per assemblare e firmare un token reale con la chiave che generi, usa il Codificatore JWT; per ispezionarne e verificarne uno, usa il Decodificatore JWT.

Strumenti correlati

Vedi tutti gli strumenti →