Introduction
"Et si tu pouvais protéger ton API comme les pros… sans être expert ?"
Tu viens de créer ton premier projet .NET, tu as ton API qui tourne, mais… comment empêcher n’importe qui d’y accéder ?
Et si je te disais que tu peux sécuriser ton application comme les grandes plateformes (comme Google ou Facebook), sans base de données de sessions ni complexité inutile ?
La réponse s’appelle JWT — ou JSON Web Token. Et aujourd’hui, je t’emmène pas à pas pour mettre en place une authentification robuste dans ton API .NET, même si tu débutes.
Pas de jargon inutile. Pas de magie noire. Juste toi, ton clavier, et une méthode utilisée par des milliers de développeurs chaque jour.
C’est quoi un JWT ? Une métaphore simple
Imagine que tu vas à un festival. À l’entrée, on te donne un bracelet RFID. Ce bracelet contient :
- Ton nom
- La date d’expiration
- Une signature invisible (comme un hologramme)
Dès ce moment, tu n’as plus besoin de montrer ton billet à chaque stand. Le personnel scanne ton bracelet, vérifie qu’il est valide, et te laisse passer.
👉 C’est exactement ce que fait un JWT.
- Header : le type de bracelet et comment il a été signé.
- Payload : tes infos (ton nom, quand ça expire…).
- Signature : la preuve que ce n’est pas un faux bracelet.
Et le plus beau ? Le serveur n’a pas besoin de garder une trace de toi. Il lit le token, vérifie la signature, et décide : "Accès autorisé" ou non.
💬 "Mais… c’est sûr, ça ?"
Oui, à condition d’utiliser une clé secrète bien protégée. Comme un mot de passe ultra-complexe que seul le serveur connaît.
Étape 1 : Crée ton API .NET (même si tu débutes)
Ouvre ton terminal (ou PowerShell) et tape cette commande :
dotnet new webapi -n MonApiSecurisee cd MonApiSecurisee
Et voilà ! Tu as une API .NET toute fraîche, prête à être sécurisée.
Pas besoin de Visual Studio : tu peux tout faire avec VS Code et le CLI .NET.
Étape 2 : Installe le package JWT
.NET ne gère pas JWT "de base". Il faut ajouter un petit outil :
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
C’est comme installer un détecteur de faux bracelets au portail du festival. Il saura reconnaître les vrais tokens.
Étape 3 : Configure ton JWT dans appsettings.json
Ouvre le fichier appsettings.json
et ajoute cette section :
"JwtSettings": { "SecretKey": "UneCleSuperSecreteEtLongueCommeUnRomanDeTolstoï!", "Issuer": "MonApi", "Audience": "MesUtilisateurs", "ExpiryInMinutes": 60 }
⚠️ Astuce de pro :
Cette clé secrète, c’est la clé de ton coffre-fort.
En production, ne la laisse jamais en dur. Utilise un Secret Manager, des variables d’environnement, ou un service comme Azure Key Vault.
Étape 4 : Active l’authentification JWT dans Program.cs
Voici le cœur du système. Dans Program.cs
, ajoute cette configuration :
var builder = WebApplication.CreateBuilder(args); // Récupère les paramètres JWT var jwtSettings = builder.Configuration.GetSection("JwtSettings"); // Ajoute l'authentification JWT builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtSettings["Issuer"], ValidateAudience = true, ValidAudience = jwtSettings["Audience"], ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(jwtSettings["SecretKey"]) ), ValidateLifetime = true, ClockSkew = TimeSpan.Zero // Pas de tolérance sur l'heure }; }); builder.Services.AddAuthorization(); builder.Services.AddControllers(); var app = builder.Build(); // Active l'authentification et l'autorisation app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();
💬 "Ça fait beaucoup d’un coup…"
Oui, mais regarde bien :
- On dit à .NET : "Utilise JWT comme méthode d’authentification."
- On lui donne les règles : "Vérifie l’émetteur, l’audience, la clé, et l’expiration."
- Et on active le tout avec
UseAuthentication()
.
Étape 5 : Crée un AuthController pour générer des tokens
Crée un fichier AuthController.cs
. Dedans, on va simuler une connexion :
[ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { private readonly IConfiguration _configuration; public AuthController(IConfiguration configuration) { _configuration = configuration; } [HttpPost("login")] public IActionResult Login([FromBody] LoginRequest request) { // En vrai, tu vérifierais dans une base de données if (request.Username == "admin" && request.Password == "password") { var token = GenerateJwtToken(request.Username); return Ok(new { Token = token }); } return Unauthorized(); // 401 } private string GenerateJwtToken(string username) { var jwtSettings = _configuration.GetSection("JwtSettings"); var secretKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(jwtSettings["SecretKey"]) ); var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256); var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, username), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) // ID unique }; var token = new JwtSecurityToken( issuer: jwtSettings["Issuer"], audience: jwtSettings["Audience"], claims: claims, expires: DateTime.UtcNow.AddMinutes( double.Parse(jwtSettings["ExpiryInMinutes"]) ), signingCredentials: signingCredentials ); return new JwtSecurityTokenHandler().WriteToken(token); } } public class LoginRequest { public string Username { get; set; } public string Password { get; set; } }
Conseil humain à humain :
Ici, on utilise un login statique (admin / password).
En vrai, connecte-toi à une base de données, ou utilise Entity Framework + Identity. Mais pour apprendre seul, cette version simple suffit.
Étape 6 : Protège tes routes avec [Authorize]
Maintenant, rends certaines routes réservées aux utilisateurs authentifiés.
Par exemple, dans WeatherForecastController.cs
:
[Authorize] // 🔒 Uniquement pour les gens avec un token valide [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet] public IActionResult Get() { return Ok(new[] { "Il va faire beau… si tu es authentifié !" }); } }
Teste cette route sans token → tu auras un 401 Unauthorized.
Avec un token valide → ✅ Accès autorisé.
Bonnes pratiques : ce que tu dois savoir (même en autodidacte)
1. Ne jamais exposer ta clé secrète
Même dans un projet perso, habitue-toi à utiliser :
dotnet user-secrets
- Variables d’environnement
- Un fichier
.env
(avec.gitignore
)
2. Prévois un mécanisme de rafraîchissement (refresh token)
Un token qui expire en 60 minutes ? C’est bien.
Mais si l’utilisateur doit se reconnecter toutes les heures… c’est pénible.
→ En 2025, les apps sérieuses utilisent des refresh tokens pour renouveler le JWT sans demander le mot de passe.
3. Teste avec Swagger ou Postman
Utilise Swagger (intégré par défaut dans .NET) pour tester :
/api/auth/login
→ récupère un token/weatherforecast
→ colle le token dans l’en-tête :Authorization: Bearer ton_token_ici
Conclusion : tu viens de franchir un palier
Félicitations ! 🎉
Tu viens de mettre en place une authentification moderne, sécurisée et scalable dans ton API .NET.
Tu n’as plus une API ouverte à tous, mais un système protégé comme dans les vraies applis.
Et le meilleur ?
Tu as tout fait en apprenant seul, avec des outils gratuits, sans payer un centime.
✨ Ce que tu peux faire maintenant :
- Ajoute une base de données (SQLite ou SQL Server)
- Implémente un système d’inscription
- Crée un mécanisme de refresh token
- Partage ton code sur GitHub pour montrer ton progrès