Codificatore JWT

Crea e firma JSON Web Token con HS256, HS384, HS512

Intestazione

Esegue in locale · Sicuro per incollare segreti

Payload

Esegue in locale · Sicuro per incollare segreti

Chiave segreta

Esegue in locale · Sicuro per incollare segreti

JWT codificato

Output will appear here…

La tua chiave segreta non lascia mai il tuo browser. Tutta la firma avviene lato client.

Prova anche:Decoder JWT

Cos'è la codifica JWT?

La codifica JWT è il processo di creazione di un JSON Web Token — una stringa compatta e sicura per gli URL che trasporta un insieme di dichiarazioni firmate con una chiave crittografica. Il risultato è un token a tre parti (intestazione.payload.firma) definito da RFC 7519 che i server possono verificare senza mantenere lo stato della sessione. La codifica JWT online ti consente di creare e firmare token direttamente nel tuo browser per test e sviluppo.

L'intestazione dichiara l'algoritmo di firma (ad es. HS256) e il tipo di token. Il payload contiene dichiarazioni — coppie chiave-valore come il soggetto (sub), il tempo di scadenza (exp) e qualsiasi dato personalizzato di cui la tua applicazione ha bisogno. Entrambe le parti vengono serializzate come JSON, quindi codificate in base64url. La firma viene calcolata sull'intestazione e il payload codificati utilizzando una chiave segreta, vincolando tutti e tre i segmenti insieme.

A differenza dei cookie di sessione, i JWT sono autonomi: il verificatore non ha bisogno di interrogare un database o chiamare un servizio esterno. Ciò rende l'autenticazione basata su JWT popolare nelle API REST, nei microservizi e nelle applicazioni a pagina singola dove l'autorizzazione senza stato riduce la latenza e semplifica la scalabilità orizzontale.

Perché usare un codificatore JWT?

La generazione manuale di JWT richiede la codifica base64url, la serializzazione JSON e il calcolo HMAC. Questo strumento gestisce tutti e tre i passaggi istantaneamente in modo che tu possa concentrarti su come ottenere le giuste dichiarazioni.

Generazione istantanea di token
Modifica l'intestazione, il payload e la chiave segreta — il JWT firmato si aggiorna in tempo reale. Nessun passaggio di build, nessuna installazione di libreria, nessun codice boilerplate.
🔒
Multipli algoritmi HMAC
Passa da HS256, HS384 e HS512 con un clic. L'intestazione si aggiorna automaticamente e la firma viene ricalcolata immediatamente.
🛡️
Elaborazione privacy-first
Tutta la firma avviene nel tuo browser utilizzando l'API Web Crypto. La tua chiave segreta e i dati del payload non lasciano mai il tuo computer — nessun server, nessun registro, nessun rischio.
📋
Assistenti di dichiarazioni con un clic
Aggiungi timestamp iat, exp+1h o exp+24h con un solo pulsante. Non è necessario calcolare manualmente i timestamp Unix o cercare l'ora epoca attuale.

Casi d'uso del codificatore JWT

Test di autenticazione frontend
Genera token con dichiarazioni e tempi di scadenza specifici per testare i flussi di accesso, la logica di aggiornamento dei token e le protezioni delle rotte senza eseguire un server di autenticazione backend.
Sviluppo di API backend
Crea token di test con dichiarazioni sub, aud e scope personalizzate per testare il middleware di autorizzazione, il controllo degli accessi basato sui ruoli e i controlli delle autorizzazioni durante lo sviluppo locale.
Pipeline DevOps e CI/CD
Genera token a breve termine per script di distribuzione, test di integrazione o comunicazione tra servizi dove un flusso OAuth completo aggiungerebbe una complessità non necessaria.
Test QA e manuali
Costruisci token con dichiarazioni di casi limite — token scaduti, campi mancanti, audience non corretti — per verificare che la tua API restituisca le corrette risposte HTTP 401 o 403.
Audit di sicurezza
Crea token firmati con algoritmi e lunghezze di chiavi diverse per validare che la tua logica di verifica rifiuta correttamente le firme deboli o non corrispondenti.
Apprendimento e prototipazione
Gli studenti e i nuovi sviluppatori di JWT possono sperimentare con campi di intestazione, strutture di dichiarazioni e algoritmi di firma per capire come funziona ogni parte del token.

HS256 vs HS384 vs HS512: Confronto degli algoritmi HMAC

Tutti e tre gli algoritmi utilizzano HMAC (Hash-based Message Authentication Code) con un segreto condiviso. La differenza è nella funzione hash sottostante, che influenza la lunghezza della firma e il margine di sicurezza. Per la maggior parte delle applicazioni, HS256 fornisce una sicurezza sufficiente. Scegli HS384 o HS512 quando i requisiti di conformità (ad es. FIPS-140) richiedono un hash più forte o quando i tuoi token portano decisioni di autorizzazione di alto valore.

AlgoritmoHashFirmaVelocitàUso tipico
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Riferimento alle dichiarazioni JWT standard

RFC 7519 definisce sette dichiarazioni registrate. Nessuna è obbligatoria, ma utilizzarle correttamente migliora l'interoperabilità e la sicurezza. La dichiarazione exp è particolarmente importante — i token senza scadenza sono validi indefinitamente se il segreto non viene ruotato.

DichiarazioneNomeDescrizioneEsempio
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

Codifica JWT nel codice

Questi esempi mostrano come creare e firmare i JWT a livello di programmazione. Ogni frammento produce un token valido firmato con HS256. Per i sistemi di produzione, impostare sempre la dichiarazione exp e utilizzare un segreto crittograficamente casuale di almeno 256 bit.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

Domande frequenti

Qual è la differenza tra la codifica JWT e la decodifica JWT?
La codifica JWT crea un token firmato da un'intestazione, un payload e una chiave segreta. La decodifica JWT inverte il processo — legge nuovamente l'intestazione e il payload codificati in base64url in JSON. La decodifica non richiede il segreto; la codifica lo richiede sempre perché la firma deve essere calcolata.
Quanto deve essere lungo il mio segreto JWT?
Per HS256, utilizza un segreto di almeno 256 bit (32 byte). Per HS384, almeno 384 bit (48 byte). Per HS512, almeno 512 bit (64 byte). I segreti più brevi sono tecnicamente accettati dalla maggior parte delle librerie ma riducono la sicurezza effettiva della firma HMAC. Genera segreti con un generatore di numeri casuali crittograficamente sicuro, non una passphrase scelta dall'uomo.
È sicuro usare questo strumento con veri segreti?
Questo strumento elabora tutto nel tuo browser utilizzando l'API Web Crypto — nessun dato viene inviato a nessun server. Detto questo, evita di incollare segreti di produzione in qualsiasi strumento web come pratica di sicurezza generale. Per la gestione delle chiavi in produzione, utilizza variabili di ambiente o un gestore di segreti come HashiCorp Vault o AWS Secrets Manager.
Dovrei usare HS256 o RS256 per la mia applicazione?
Usa HS256 quando lo stesso servizio crea e verifica i token — è più veloce e semplice. Usa RS256 (asimmetrico) quando i servizi di terzi hanno bisogno di verificare i tuoi token senza la possibilità di crearli. RS256 è comune nei provider OAuth 2.0, OpenID Connect e nelle architetture SaaS multi-tenant.
Perché il mio JWT scade immediatamente dopo la creazione?
La dichiarazione exp utilizza i timestamp Unix in secondi, non millisecondi. Se imposti exp su Date.now() (che restituisce i millisecondi), il token sembrerà scadere migliaia di anni nel futuro — o se accidentalmente utilizzi un valore in millisecondi dove i secondi sono attesi, le librerie potrebbero interpretarlo come già scaduto. Usa sempre Math.floor(Date.now() / 1000) in JavaScript o int(time.time()) in Python.
Posso mettere dati sensibili nel payload JWT?
Puoi, ma non dovresti. Il payload JWT è codificato in base64url, non crittografato — chiunque abbia il token può leggere le dichiarazioni. Non archiviare password, numeri di carte di credito o dati personali nel payload. Se devi includere informazioni sensibili, utilizza JWE (JSON Web Encryption) come definito in RFC 7516, che crittografa l'intero payload.
Cosa succede se modifico il payload dopo la firma?
La firma diventa non valida. La firma HMAC è calcolata sui byte esatti dell'intestazione e del payload codificati. Qualsiasi modifica — anche l'aggiunta di uno spazio o la modifica di un singolo carattere — produce una firma completamente diversa. Un verificatore correttamente implementato rifiuterà il token con un errore di mancata corrispondenza della firma.