Struttura e claim JWT
Comprenda header, payload e firma.
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_adQssw5cL'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- emittentesub- soggetto (l'ID dell'utente)aud- destinatariexp- ora di scadenza (secondi Unix)nbf- non valido prima diiat- 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' claimPerché 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 minutesVerifica 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 tramiteUser.
Successivamente configurerà ASP.NET Core per convalidare questi token.
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
- Struttura e claim JWT
- Configurazione dell'autenticazione JWT Bearer
- Emissione dei token
- Token di rinnovo e scadenza