Jetons JWT en C# (.NET) : guide complet pour travailler avec System.IdentityModel.Tokens.Jwt
\n\nJSON Web Token (JWT) est un format compact et sécurisé pour les URL, permettant de transférer des données entre parties sous la forme d'un objet JSON. Dans l'écosystème C# (.NET), la bibliothèque puissante System.IdentityModel.Tokens.Jwt, qui fait partie du package Microsoft.IdentityModel.Tokens, est utilisée pour travailler avec JWT. Cet outil permet de générer, signer, vérifier et décoder les jetons JWT, assurant une authentification sécurisée et un échange de données dans les applications web, API et microservices.
\n\nInstallation de la bibliothèque
\nPour commencer, ajoutez le package NuGet à votre projet. Exécutez la commande dans la console du gestionnaire de packages :
\ndotnet add package System.IdentityModel.Tokens.Jwt\nOu via la console du gestionnaire de packages dans Visual Studio :
\nInstall-Package System.IdentityModel.Tokens.Jwt\n\nComposants principaux de la bibliothèque
\n- \n
JwtSecurityTokenHandler— la classe principale pour créer, sérialiser et vérifier les jetons. \n SecurityTokenDescriptor— la description du jeton : claims, durée de vie, signature. \n SymmetricSecurityKey— la clé symétrique pour la signature (HS256, HS384, HS512). \n SigningCredentials— les informations d'identification de signature (algorithme + clé). \n TokenValidationParameters— les paramètres de validation (vérification de la signature, de la durée de vie, de l'émetteur). \n
Génération d'un jeton JWT en C#
\nCréons un jeton simple avec des claims (revendications) personnalisées et une durée de vie de 1 heure :
\nusing System.IdentityModel.Tokens.Jwt;\nusing System.Security.Claims;\nusing System.Text;\nusing Microsoft.IdentityModel.Tokens;\n\npublic string GenerateToken()\n{\n var secretKey = "my_super_secret_key_1234567890!";\n var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));\n var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);\n\n var claims = new[]\n {\n new Claim(ClaimTypes.Name, "Иван Петров"),\n new Claim(ClaimTypes.Email, "ivan@example.com"),\n new Claim(ClaimTypes.Role, "Admin")\n };\n\n var tokenDescriptor = new SecurityTokenDescriptor\n {\n Subject = new ClaimsIdentity(claims),\n Expires = DateTime.UtcNow.AddHours(1),\n Issuer = "MyApp",\n Audience = "MyAppUsers",\n SigningCredentials = credentials\n };\n\n var tokenHandler = new JwtSecurityTokenHandler();\n var token = tokenHandler.CreateToken(tokenDescriptor);\n return tokenHandler.WriteToken(token);\n}\n\nVérification (validation) d'un jeton JWT
\nLors de la réception d'un jeton du client, il est nécessaire de vérifier sa signature, sa date d'expiration et d'autres paramètres :
\npublic ClaimsPrincipal ValidateToken(string token)\n{\n var secretKey = "my_super_secret_key_1234567890!";\n var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));\n\n var tokenHandler = new JwtSecurityTokenHandler();\n var validationParameters = new TokenValidationParameters\n {\n ValidateIssuer = true,\n ValidIssuer = "MyApp",\n ValidateAudience = true,\n ValidAudience = "MyAppUsers",\n ValidateLifetime = true,\n IssuerSigningKey = key,\n ClockSkew = TimeSpan.Zero // supprime la marge de temps par défaut\n };\n\n try\n {\n var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);\n return principal;\n }\n catch (SecurityTokenExpiredException)\n {\n Console.WriteLine("Le jeton a expiré");\n return null;\n }\n catch (SecurityTokenInvalidSignatureException)\n {\n Console.WriteLine("Signature du jeton invalide");\n return null;\n }\n}\n\nDécodage du jeton sans vérification de la signature
\nParfois, il suffit de lire
Aussi dans la bibliothèque
Apprentissage automatique en JavaScript : bibliothèques pour Node.js — aperçu et exemples
Authentification et autorisation en Java : Spring Security et JWT
Bibliothèque standard JavaScript (Node.js) : aperçu complet
Respect/Validation PHP : guide complet avec exemples