0Pricing
C# Academy · Leçon

Émettre des jetons

Générez des jetons signés lors de la connexion.

Émettre des jetons est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Émission et validation

Jusqu’à présent, vous avez validé des jetons. Vous allez maintenant les émettre : après la connexion réussie d’un utilisateur, votre API génère un JWT signé et le renvoie.

Le type principal utilisé à cette fin est JwtSecurityTokenHandler, issu de System.IdentityModel.Tokens.Jwt.

dotnet add package System.IdentityModel.Tokens.Jwt

La clé de signature

Pour signer un jeton, vous avez besoin d’une clé. Avec HS256, vous réutilisez le même secret symétrique que celui utilisé par le validateur.

Conservez ce secret en dehors du contrôle de version : chargez-le depuis la configuration ou un coffre de secrets.

var key = new SymmetricSecurityKey(
    Encoding.UTF8.GetBytes(configuration["Jwt:Key"]!));

SigningCredentials

SigningCredentials associe la clé à l’algorithme. Pour une clé symétrique, utilisez SecurityAlgorithms.HmacSha256.

var creds = new SigningCredentials(
    key,
    SecurityAlgorithms.HmacSha256);

Construction des revendications

Décidez du contenu du jeton. Incluez toujours un sujet (l’identifiant de l’utilisateur) ainsi que les rôles ou les données nécessaires à l’API.

Ajoutez un jti unique afin que chaque jeton puisse être identifié.

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)
};

Création de JwtSecurityToken

JwtSecurityToken regroupe l’émetteur, l’audience, les revendications, l’expiration et les informations d’authentification de signature dans un objet jeton.

var token = new JwtSecurityToken(
    issuer: configuration["Jwt:Issuer"],
    audience: configuration["Jwt:Audience"],
    claims: claims,
    notBefore: DateTime.UtcNow,
    expires: DateTime.UtcNow.AddMinutes(15),
    signingCredentials: creds);

Sérialisation en chaîne de caractères

L’objet jeton doit être écrit sous sa forme compacte de chaîne header.payload.signature avant d’être envoyé au client.

var handler = new JwtSecurityTokenHandler();
string jwt = handler.WriteToken(token);
// jwt now looks like eyJhbGciOiJI...

Service de jetons réutilisable

Encapsulez la logique dans un service afin que les contrôleurs restent simples et que la configuration soit regroupée au même endroit.

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);
    }
}

Branchement du point de terminaison de connexion

Le point de terminaison de connexion vérifie les identifiants, puis appelle le service et renvoie le jeton au 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) });
});

Symétrique ou asymétrique

HS256 utilise un secret partagé unique pour la signature et la validation. RS256 utilise une clé privée pour signer et une clé publique pour valider.

La signature asymétrique vous permet de publier la clé publique afin que d’autres services valident les jetons sans jamais détenir le secret de signature.

var creds = new SigningCredentials(
    new RsaSecurityKey(rsaPrivateKey),
    SecurityAlgorithms.RsaSha256);

Enregistrement du service

Ajoutez le service de jetons à l’injection de dépendances afin de pouvoir l’injecter dans les points de terminaison et les contrôleurs.

builder.Services.AddScoped<TokenService>();

Gardez des jetons concis et de courte durée

Deux bonnes pratiques pour l’émission de jetons :

  • Concis : incluez uniquement les revendications nécessaires à l’API : le jeton est transmis à chaque requête.
  • De courte durée : des jetons d’accès valables de 5 à 15 minutes limitent les dégâts en cas de fuite.
expires: DateTime.UtcNow.AddMinutes(15)

Vérification rapide

Vérifiez ce que vous avez appris sur l’émission de jetons.

Récapitulatif

Vous avez émis des JWT signés :

  • SigningCredentials associe votre clé à un algorithme.
  • Construisez une liste de Claim, puis un JwtSecurityToken avec un émetteur, une audience et une expiration.
  • JwtSecurityTokenHandler.WriteToken le sérialise en chaîne compacte.
  • Gardez des jetons concis et de courte durée.

Ensuite : les jetons d’actualisation et les stratégies d’expiration.

Questions Fréquemment Posées

La leçon « Émettre des jetons » est-elle gratuite ?

Oui — le texte complet de « Émettre des jetons » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Émettre des jetons » ?

Générez des jetons signés lors de la connexion. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Émettre des jetons » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Structure et revendications JWT
  2. Configurer l’authentification JWT Bearer
  3. Émettre des jetons
  4. Jetons d’actualisation et expiration
← Retour à C# Academy