Emissione dei token
Generi token firmati al momento dell'accesso.
Emissione dei token è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 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.
Emissione e convalida
Finora ha convalidato i token. Ora li emetterà: dopo che un utente ha effettuato correttamente l'accesso, la propria API genera un JWT firmato e lo restituisce.
Il tipo principale a questo scopo è JwtSecurityTokenHandler di System.IdentityModel.Tokens.Jwt.
dotnet add package System.IdentityModel.Tokens.JwtLa chiave di firma
Per firmare un token è necessaria una chiave. Per HS256 riutilizzi lo stesso segreto simmetrico usato dal componente di convalida.
Tenga questo segreto fuori dal controllo del codice sorgente: lo carichi dalla configurazione o da un archivio di segreti.
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(configuration["Jwt:Key"]!));SigningCredentials
SigningCredentials associa la chiave all'algoritmo. Per una chiave simmetrica, utilizzi SecurityAlgorithms.HmacSha256.
var creds = new SigningCredentials(
key,
SecurityAlgorithms.HmacSha256);Creazione dei claim
Decida quali informazioni inserire nel token. Includa sempre un subject (l'ID dell'utente) e tutti i ruoli o i dati necessari all'API.
Aggiunga un jti univoco, in modo che ogni token possa essere identificato.
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Role, user.Role)
};Creazione di JwtSecurityToken
JwtSecurityToken riunisce l'emittente, l'audience, i claim, la scadenza e le credenziali di firma in un oggetto token.
var token = new JwtSecurityToken(
issuer: configuration["Jwt:Issuer"],
audience: configuration["Jwt:Audience"],
claims: claims,
notBefore: DateTime.UtcNow,
expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);Serializzazione in una stringa
L'oggetto token deve essere serializzato nella sua forma compatta di stringa header.payload.signature prima di essere inviato al client.
var handler = new JwtSecurityTokenHandler();
string jwt = handler.WriteToken(token);
// jwt now looks like eyJhbGciOiJI...Un servizio token riutilizzabile
Racchiuda la logica in un servizio, così i controller rimangono ordinati e la configurazione risiede in un unico punto.
public class TokenService(IConfiguration config)
{
public string CreateAccessToken(AppUser user)
{
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(config["Jwt:Key"]!));
var creds = new SigningCredentials(
key, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(ClaimTypes.Role, user.Role)
};
var token = new JwtSecurityToken(
config["Jwt:Issuer"], config["Jwt:Audience"],
claims, expires: DateTime.UtcNow.AddMinutes(15),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}Collegamento dell'endpoint di accesso
L'endpoint di accesso verifica le credenziali, quindi chiama il servizio e restituisce il token al client.
app.MapPost("/login", (LoginDto dto, TokenService tokens) =>
{
var user = Authenticate(dto.Username, dto.Password);
if (user is null) return Results.Unauthorized();
return Results.Ok(new { accessToken = tokens.CreateAccessToken(user) });
});Simmetrico e asimmetrico
HS256 usa un unico segreto condiviso sia per la firma sia per la convalida. RS256 usa una chiave privata per firmare e una chiave pubblica per convalidare.
La firma asimmetrica consente di pubblicare la chiave pubblica, così gli altri servizi possono convalidare i token senza mai possedere il segreto di firma.
var creds = new SigningCredentials(
new RsaSecurityKey(rsaPrivateKey),
SecurityAlgorithms.RsaSha256);Registrazione del servizio
Aggiunga il servizio token all'iniezione delle dipendenze, in modo che possa essere iniettato negli endpoint e nei controller.
builder.Services.AddScoped<TokenService>();Mantenga i token essenziali e brevi
Due buone pratiche per l'emissione dei token:
- Essenziali: includa solo i claim necessari all'API, perché il token viaggia in ogni richiesta.
- Di breve durata: i token di accesso da 5 a 15 minuti limitano i danni se uno di essi viene sottratto.
expires: DateTime.UtcNow.AddMinutes(15)Verifica rapida
Verifichi ciò che ha appreso sull'emissione dei token.
Riepilogo
Ha emesso JWT firmati:
SigningCredentialsassocia la propria chiave a un algoritmo.- Crei un elenco di
Claim, quindi unJwtSecurityTokencon emittente, audience e scadenza. JwtSecurityTokenHandler.WriteTokenlo serializza nella stringa compatta.- Mantenga i token essenziali e di breve durata.
Successivamente vedrà i refresh token e le strategie di scadenza.
Domande Frequenti
La lezione «Emissione dei token» è gratuita?
Sì — il testo completo di «Emissione dei token» è 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 «Emissione dei token»?
Generi token firmati al momento dell'accesso. 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 3 di 4.
Quanto tempo richiede la lezione «Emissione dei token»?
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