Cryptology Academy · Lezione

Anatomia di JWT: header, payload e firma

Decodifichi le parti in base64url e comprenda ogni campo di JWT.

Lezione 1 di 413 passaggi

Anatomia di JWT: header, payload e firma è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Che cos'è un JWT?

Un JSON Web Token (JWT) è un formato compatto di token sicuro per gli URL, definito nella RFC 7519. Codifica le claims (asserzioni relative a un soggetto) e una firma crittografica in un'unica stringa, consentendo un'autenticazione stateless.

Struttura in tre parti

Un JWT ha la forma: base64url(header).base64url(payload).base64url(signature). Il punto separa le parti. Header e payload sono leggibili (in base64url, non cifrati). Solo la signature è crittografica.

Header

L'header è un oggetto JSON: {"alg":"HS256","typ":"JWT"}. alg specifica l'algoritmo di firma (HS256, RS256, ES256, none). typ è sempre "JWT". Tra gli header aggiuntivi è incluso kid (ID della chiave), utilizzato per selezionare la chiave.

Payload / Claims

Claims registrate standard: iss (emittente), sub (soggetto), aud (destinatario), exp (timestamp Unix di scadenza), nbf (non prima di), iat (emesso il), jti (ID del JWT per la revoca). Le claims personalizzate sono qualsiasi coppia chiave-valore aggiuntiva.

Decodifica di un JWT

import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)

Verifica della firma

Per HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). Il destinatario ricalcola questo valore e lo confronta con la parte signature. Se corrispondono e il token non è scaduto, il token è valido.

Firme asimmetriche

Per RS256: la chiave privata firma la stringa header.payload utilizzando RSA-SHA256. Qualsiasi soggetto in possesso della chiave pubblica può verificare la firma senza la chiave privata. Le chiavi pubbliche vengono distribuite tramite endpoint JWKS (JSON Web Key Set), ad esempio /.well-known/jwks.json.

Codifica Base64url

Base64url sostituisce + con - e / con _, ed elimina il padding =. In questo modo i JWT possono essere utilizzati negli URL, nelle intestazioni HTTP e nei cookie senza codifica percentuale. I byte originali non sono comunque cifrati: sono solo codificati.

I JWT non sono cifrati per impostazione predefinita

Il payload di un JWT è visibile a chiunque lo decodifichi da base64url. Non inserisca mai segreti (password, numeri di previdenza sociale) nel payload di un JWT, a meno che non utilizzi JWE (JSON Web Encryption) con l'algoritmo "enc" per la cifratura effettiva.

Durata del token

Imposti exp su una durata breve (15-60 minuti per i token di accesso). I JWT di lunga durata accumulano rischi: se vengono sottratti, restano validi fino alla scadenza. Utilizzi refresh token (conservati in modo sicuro) per emettere nuovi token di accesso di breve durata.

Individuazione di JWKS

I provider di autenticazione (Auth0, Keycloak, Google) pubblicano un URL JWKS. Il verificatore recupera le chiavi pubbliche in base a kid, le mette in cache e verifica le firme senza contattare l'emittente a ogni richiesta. La rotazione delle chiavi aggiorna l'endpoint JWKS.

Verifica rapida

Quale parte di un JWT contiene la firma crittografica?

Riepilogo

Un JWT è composto da tre parti JSON codificate in base64url: header (algoritmo), payload (claims) e signature. Il payload è leggibile, non cifrato. Prossimo argomento: scelta tra HS256 e RS256.

Gratis per iniziare

Impara Cryptology Academy con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
67
Lezioni
261

Domande Frequenti

La lezione «Anatomia di JWT: header, payload e firma» è gratuita?

Sì — il testo completo di «Anatomia di JWT: header, payload e firma» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «Anatomia di JWT: header, payload e firma»?

Decodifichi le parti in base64url e comprenda ogni campo di JWT. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Anatomia di JWT: header, payload e firma»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?

Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Anatomia di JWT: header, payload e firma
  2. HS256 e RS256: JWT simmetrici e asimmetrici
  3. Vulnerabilità di JWT: alg=none e confusione delle chiavi
  4. Best practice per un'implementazione sicura di JWT
← Torna a Cryptology Academy