Jetons JWT en C# (.NET) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Jetons JWT en C# (.NET) : création, vérification et validation



JSON Web Token (JWT) est une norme ouverte (RFC 7519) pour la création de jetons d'accès basés sur le format JSON. JWT est largement utilisé dans les applications web modernes pour l'authentification et l'échange d'informations entre le client et le serveur. Dans cet article, nous allons examiner en détail comment travailler avec les jetons JWT dans l'écosystème C# (.NET), y compris la création, la signature, la vérification et la validation des jetons.



Composants principaux de JWT



JWT se compose de trois parties séparées par des points :

  • Header — en-tête contenant des informations sur le type de jeton et l'algorithme de signature
  • Payload — charge utile avec les données (claims)
  • Signature — signature garantissant l'intégrité du jeton


Exemple de jeton JWT : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



Installation des packages nécessaires



Pour travailler avec JWT dans .NET, il est nécessaire d'installer le package System.IdentityModel.Tokens.Jwt. Cela peut être fait via NuGet Package Manager ou avec .NET CLI :



dotnet add package System.IdentityModel.Tokens.Jwt


Il peut également être nécessaire d'installer Microsoft.AspNetCore.Authentication.JwtBearer pour l'intégration avec ASP.NET Core :



dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer


Création d'un jeton JWT en C#



Examinons un exemple complet de création d'un jeton JWT en utilisant une clé symétrique (HMAC SHA256) :



using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;using Microsoft.IdentityModel.Tokens;

public class JwtService{ private readonly string _secretKey; private readonly string _issuer; private readonly string _audience;

public JwtService(string secretKey, string issuer, string audience) { _secretKey = secretKey; _issuer = issuer; _audience = audience; }

public string GenerateToken(string userId, string userName, string role) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userId), new Claim(ClaimTypes.Name, userName), new Claim(ClaimTypes.Role, role), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) };

var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: credentials );

return new JwtSecurityTokenHandler().WriteToken(token); }}


Vérification et validation du jeton JWT



Pour vérifier l'authenticité et extraire les données du jeton, la méthode ValidateToken est utilisée :



public ClaimsPrincipal ValidateToken(string token){    var tokenHandler = new JwtSecurityTokenHandler();    var key = Encoding.UTF8.GetBytes(_secretKey);

try { var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = _issuer, ValidateAudience = true, ValidAudience = _audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero\

Recommendations