0Pricing
C# Academy · Lezione

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.Jwt

La 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:

  • SigningCredentials associa la propria chiave a un algoritmo.
  • Crei un elenco di Claim, quindi un JwtSecurityToken con emittente, audience e scadenza.
  • JwtSecurityTokenHandler.WriteToken lo 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

  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