Struttura e funzionamento di un JSON Web Token (JWT)
Un JSON Web Token (JWT) è uno standard aperto (RFC 7519) utilizzato per trasmettere informazioni in modo compatto e sicuro tra due parti come oggetto JSON. La struttura di un JWT è composta rigorosamente da tre parti distinte, separate da un punto (.):
- Intestazione: Contiene i metadati relativi al token, come l'algoritmo di firma e il tipo di token.
- Payload: Contiene le dichiarazioni (claim), ovvero i dati effettivi che si desidera trasmettere (ad esempio, informazioni sull'utente o scadenze).
- Firma (Signature): Creata combinando l'intestazione codificata, il payload codificato, un segreto o una chiave pubblica/privata, e l'algoritmo specificato.
Ciascuna delle prime due parti viene codificata singolarmente utilizzando lo standard Base64URL prima di essere unita dall'apposito separatore. Il decodificatore JWT analizza questa stringa strutturata, estrae le singole sezioni e le converte nuovamente in testo leggibile.
Analisi dell'Intestazione e del Payload
L'intestazione e il payload racchiudono le informazioni vitali per l'autenticazione e l'autorizzazione all'interno dei sistemi informatici.
L'Intestazione e i suoi claim comuni
L'intestazione definisce come interpretare il token. I claim più comuni presenti in questa sezione sono:
alg: Specifica l'algoritmo crittografico utilizzato per proteggere il token (ad esempio, HS256 o RS256).typ: Indica il tipo di token, che nel caso di questi standard è tipicamenteJWT.
Il Payload e i claim temporali
Il payload contiene i dati trasferiti e i claim registrati che regolano la validità temporale del token:
iat(Issued At): Rappresenta il momento esatto in cui il token è stato generato, espresso in formato timestamp Unix.exp(Expiration Time): Definisce il termine ultimo oltre il quale il token non deve più essere accettato per l'autenticazione.
La presenza e la corretta formattazione di questi parametri determinano lo stato di validità temporale del token durante le verifiche di sicurezza.
Codifica Base64URL e formattazione JSON
La trasmissione di dati binari o testuali complessi attraverso intestazioni HTTP richiede un formato sicuro per gli URL. Per questo motivo, i JWT utilizzano la codifica Base64URL, una variante della codifica Base64 standard che sostituisce i caratteri + e / rispettivamente con - e _, eliminando inoltre il carattere di riempimento =.
Una volta decodificati i segmenti Base64URL, i dati ottenuti devono corrispondere a una struttura JSON (JavaScript Object Notation) sintatticamente valida. Se la stringa decodificata non rispetta le regole di formattazione JSON (ad esempio per parentesi graffe mancanti o virgole errate), l'analisi del token fallisce.
Differenza tra decodifica e verifica della firma
È fondamentale distinguere l'operazione di decodifica da quella di verifica di un JWT:
- Decodifica: Consiste nella semplice conversione della stringa Base64URL in testo JSON in chiaro. Chiunque sia in possesso del token può decodificarlo e leggerne il contenuto, poiché non è richiesta alcuna chiave segreta per questa operazione.
- Verifica: Consiste nel ricalcolare la firma crittografica del token utilizzando l'algoritmo specificato nell'intestazione e la chiave segreta (o chiave pubblica) appropriata. Questo processo garantisce che il contenuto del token non sia stato alterato o manomesso dopo la sua emissione.
Questo strumento esegue esclusivamente la decodifica e l'ispezione visiva dei dati contenuti nel token. Non effettua alcuna verifica della firma crittografica e non richiede l'inserimento di chiavi private o segreti di firma. Di conseguenza, l'analisi visiva permette di verificare la correttezza dei dati inseriti, ma non garantisce l'autenticità del token stesso.
Gestione degli errori e regole di validazione
Il decodificatore applica controlli rigorosi sulla struttura e sulla formattazione del testo inserito. Se l'input non soddisfa i requisiti di un reale JSON Web Token, l'interfaccia nasconde le aree di decodifica e mostra messaggi di errore specifici:
- Se l'input è vuoto, lo strumento rimane nello stato "Pronto. Incolli un token JWT per decodificarlo.".
- Se la stringa non contiene esattamente due punti separatori, viene visualizzato l'errore "Token JWT non valido: sono previste tre parti separate da punti.".
- Se la decodifica Base64URL dell'intestazione fallisce, compare il messaggio "Impossibile decodificare l'intestazione: formato Base64URL non valido.".
- Se la decodifica Base64URL del payload fallisce, viene mostrato l'errore "Impossibile decodificare il payload: formato Base64URL non valido.".
- Se l'intestazione decodificata non è un JSON valido, l'errore restituito è "L'intestazione non corrisponde a un oggetto JSON valido.".
- Se il payload decodificato non è un JSON valido, l'errore restituito è "Il payload non corrisponde a un oggetto JSON valido.".
- Se la lunghezza complessiva del testo inserito è eccessiva, il sistema segnala "La lunghezza supera quella di un reale token JWT.".
Quando l'input viene rimosso tramite il comando "Cancella", lo stato viene azzerato e il focus della digitazione ritorna automaticamente sul campo di inserimento.
Riservatezza e sicurezza dei dati
Il trattamento dei dati inseriti avviene nel pieno rispetto della riservatezza dell'utente. Il processo di decodifica del token viene eseguito localmente all'interno del browser web del lettore. Nessun dato, token o informazione sensibile viene trasmesso o caricato sui server di BroBroGo.
Domande frequenti (FAQ)
È sicuro incollare il mio token JWT qui?
Sì. La decodifica avviene interamente nel Suo browser: il token non viene mai inviato a BroBroGo.
Questo strumento effettua la verifica della firma?
No. Lo strumento si limita a decodificare l'intestazione (header) e il payload per consentirne la lettura. La verifica di una firma richiede l'inserimento del segreto di firma o della chiave pubblica, dati che questo strumento non richiede.
Come posso verificare se il mio token è scaduto?
Il decodificatore analizza il claim exp e mostra un indicatore di stato (valido, scaduto, non ancora valido o senza scadenza) accanto al token decodificato.