Authentification JWT avec .NET Core : Un exemple pratique
Introduction
L'authentification JWT (JSON Web Token) est une méthode courante et efficace pour sécuriser les applications web. Elle permet de valider l'identité d'un utilisateur et de contrôler son accès aux ressources. Dans ce tutoriel, nous allons vous guider à travers un exemple pratique d'authentification JWT avec .NET Core.
Configuration de l'application .NET Core
Commencez par créer une nouvelle application web .NET Core. Vous pouvez utiliser Visual Studio ou l'interface de ligne de commande.
-
Création du projet:
dotnet new webapi -o MyJwtApp cd MyJwtApp
-
Installation des packages nécessaires:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer dotnet add package Microsoft.IdentityModel.Tokens
Génération des clés secrètes et du jeton JWT
-
Création d'une clé secrète:
public static class SecretKey { public static string Key = "VotreCléSecrèteTrèsLongueEtAléatoire"; }
Remplacez
"VotreCléSecrèteTrèsLongueEtAléatoire"
par une clé secrète réellement aléatoire et complexe. -
Configuration des options JWT:
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecretKey.Key)), ValidateIssuer = false, ValidateAudience = false }; }); }
Implémentation du contrôleur sécurisé
-
Définition d'un contrôleur sécurisé:
[Authorize] [ApiController] [Route("api/[controller]")] public class SecureController : ControllerBase { [HttpGet] public IActionResult GetSecretData() { return Ok("Données secrètes accessibles uniquement aux utilisateurs authentifiés."); } }
L'attribut
[Authorize]
protège la méthodeGetSecretData
et ne la rend accessible que pour les utilisateurs authentifiés.
Génération du jeton JWT
-
Définition d'une classe pour les revendications du jeton:
public class UserClaims { public string UserId { get; set; } public string Role { get; set; } }
-
Création d'une méthode pour générer le jeton:
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; public class JwtTokenService { public string GenerateToken(UserClaims userClaims) { var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userClaims.UserId), new Claim(ClaimTypes.Role, userClaims.Role) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecretKey.Key)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: "VotreServeur", audience: "VotreApplication", claims: claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: creds ); return new JwtSecurityTokenHandler().WriteToken(token); } }
Exemple d'utilisation
-
Création d'un utilisateur fictif:
var userClaims = new UserClaims { UserId = "12345", Role = "Admin" };
-
Génération du jeton JWT:
var jwtTokenService = new JwtTokenService(); var token = jwtTokenService.GenerateToken(userClaims);
-
Envoi du jeton au client:
Vous pouvez renvoyer le jeton au client dans l'en-tête
Authorization
de la réponse HTTP.
Conclusion
Ce tutoriel vous a permis de découvrir les bases de l'authentification JWT avec .NET Core. Vous avez appris à configurer l'authentification JWT, à générer des jetons et à sécuriser un contrôleur. Vous pouvez maintenant utiliser ces connaissances pour sécuriser votre application .NET Core et contrôler l'accès aux ressources sensibles.
N'oubliez pas de remplacer les valeurs par défaut par les vôtres et de choisir une clé secrète suffisamment complexe pour garantir la sécurité de votre application.
Mots-clés
.NET Core, JWT, Authentification, Sécurité, Exemple, Token