C# Academy · Lezione

Struttura e claim JWT

Comprenda header, payload e firma.

Lezione 1 di 413 passaggi

Struttura e claim JWT è una lezione C# 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 C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Che cos'è un JWT?

Un JSON Web Token (JWT) è un formato compatto di token sicuro per gli URL, usato per trasmettere in modo sicuro le attestazioni tra due parti. In ASP.NET Core è il modo più comune per autenticare API stateless.

Un JWT è semplicemente una stringa composta da tre parti codificate in Base64Url e unite da punti: header.payload.signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

L'header

L'header descrive il modo in cui il token viene firmato. È un piccolo oggetto JSON codificato in Base64Url nel primo segmento.

alg indica l'algoritmo di firma, ad esempio HS256 o RS256, mentre typ è quasi sempre JWT.

{
  "alg": "HS256",
  "typ": "JWT"
}

Il payload

Il payload contiene le attestazioni, cioè informazioni sull'utente e metadati sul token. È il secondo segmento.

Importante: il payload è solo codificato, non crittografato. Chiunque può decodificarlo, quindi non inserisca mai qui informazioni segrete.

{
  "sub": "1234",
  "name": "Alice",
  "role": "admin",
  "exp": 1735689600
}

La firma

La firma garantisce che il token non sia stato manomesso. Il server la calcola a partire dall'header codificato, dal payload codificato e da una chiave segreta.

Se qualcuno modifica anche un solo carattere del payload, la firma non corrisponde più e la convalida ha esito negativo.

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secretKey
)

Attestazioni registrate

Alcuni nomi delle attestazioni sono standardizzati dalla specifica JWT (RFC 7519). Usano chiavi brevi di tre lettere:

  • iss - emittente
  • sub - soggetto (l'ID dell'utente)
  • aud - destinatari
  • exp - ora di scadenza (secondi Unix)
  • nbf - non valido prima di
  • iat - emesso il
{
  "iss": "https://api.myapp.com",
  "aud": "myapp-clients",
  "sub": "42",
  "exp": 1735689600,
  "iat": 1735686000
}

Attestazioni personalizzate

Oltre all'insieme registrato, è possibile aggiungere tutte le attestazioni personalizzate necessarie all'applicazione: ruoli, autorizzazioni, ID dei tenant, email e altro.

Mantenga il payload di piccole dimensioni: ogni attestazione viene trasmessa in ogni richiesta.

{
  "sub": "42",
  "email": "alice@myapp.com",
  "role": "admin",
  "tenant_id": "acme",
  "permissions": ["orders:read", "orders:write"]
}

I claim in ASP.NET Core

In .NET, i claim sono modellati dal tipo System.Security.Claims.Claim. Ogni claim è una coppia tipo / valore.

Quando un JWT viene convalidato, ASP.NET Core trasforma ogni voce del payload in un Claim nel ClaimsPrincipal dell'utente.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, "42"),
    new Claim(ClaimTypes.Name, "Alice"),
    new Claim(ClaimTypes.Role, "admin"),
    new Claim("tenant_id", "acme")
};

ClaimsPrincipal e ClaimsIdentity

Un utente autenticato è rappresentato da un ClaimsPrincipal, che contiene uno o più oggetti ClaimsIdentity, ciascuno dei quali contiene un insieme di claim.

In un controller vi si accede tramite User.

// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;

Mappatura dei tipi di claim

Per impostazione predefinita, il gestore JWT mappa le chiavi brevi dei JWT in tipi di claim con URI estesi (ad esempio, sub diventa ClaimTypes.NameIdentifier).

Per mantenere i nomi brevi originali, disabiliti la mappatura in ingresso una volta sola all'avvio.

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claim

Perché non usare semplicemente un cookie di sessione?

I JWT sono autocontenuti: il server può convalidarli usando solo la chiave di firma, senza cercare dati nel database né usare un archivio di sessioni lato server.

Questo li rende ideali per le API scalabili orizzontalmente e per i microservizi, dove qualsiasi nodo può verificare lo stesso token.

// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...

Lo svantaggio: la revoca

Poiché un JWT è autocontenuto e considerato attendibile fino alla scadenza, non è possibile revocarlo facilmente prima del momento indicato da exp.

La mitigazione più comune consiste nel mantenere brevi le durate dei token di accesso e nell'associarli a refresh token, trattati più avanti nel corso.

// Short-lived access token
exp = iat + 15 * 60;  // 15 minutes

Verifica rapida

Verifichi la comprensione della struttura dei JWT.

Riepilogo

Ha appreso la struttura di un JWT e il funzionamento dei claim in ASP.NET Core:

  • Un JWT è composto da header.payload.signature, ciascuna parte codificata in Base64Url.
  • Il payload contiene claim registrati e personalizzati, codificati ma non crittografati.
  • La firma garantisce l'integrità usando un segreto o una coppia di chiavi.
  • .NET trasforma i claim in un ClaimsPrincipal, che si legge tramite User.

Successivamente configurerà ASP.NET Core per convalidare questi token.

Gratis per iniziare

Impara C# 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
93
Lezioni
346

Domande Frequenti

La lezione «Struttura e claim JWT» è gratuita?

Sì — il testo completo di «Struttura e claim JWT» è 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 C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Struttura e claim JWT»?

Comprenda header, payload e firma. Eserciti C# 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 C# Academy?

Non è richiesta alcuna esperienza precedente. C# 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 «Struttura e claim JWT»?

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 C# Academy?

Sì. Ogni lezione C# 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. Struttura e claim JWT
  2. Configurazione dell'autenticazione JWT Bearer
  3. Emissione dei token
  4. Token di rinnovo e scadenza
← Torna a C# Academy