Autorisation et authentification en C# (.NET) : des bases aux solutions industrielles
La sécurité des applications web est un aspect critique du développement, et dans l'écosystème C# (.NET), il existe une puissante pile d'outils pour implémenter l'authentification (vérification de l'identité de l'utilisateur) et l'autorisation (vérification des droits d'accès). Dans cet article, nous allons examiner les approches clés : de l'intégré ASP.NET Core Identity aux solutions flexibles basées sur JWT et OAuth 2.0.
1. ASP.NET Core Identity — système intégré de gestion des utilisateurs
ASP.NET Core Identity est un framework complet pour l'inscription, la connexion, la gestion des rôles et des mots de passe. Il fournit des modèles prêts à l'emploi (User, Role), un stockage (par défaut Entity Framework + SQL Server) et un middleware.
// Enregistrement dans Program.csbuilder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddDefaultIdentity<IdentityUser>(options =>{ options.SignIn.RequireConfirmedAccount = true; options.Password.RequiredLength = 8;}).AddRoles<IdentityRole>().AddEntityFrameworkStores<AppDbContext>();
// Middlewareapp.UseAuthentication();app.UseAuthorization();Exemple de contrôleur avec protection :
[Authorize(Roles = "Admin")]public class AdminController : Controller{ public IActionResult Index() => View();}
// Obtention de l'utilisateur actuelvar user = await _userManager.GetUserAsync(User);var roles = await _userManager.GetRolesAsync(user);2. JWT (JSON Web Token) — authentification transparente pour les API et SPA
JWT est un jeton compact et sûr pour les URL qui contient des claims (revendications) sur l'utilisateur. Idéal pour les API REST, les applications mobiles et les Single Page Applications (React, Angular, Vue).
Installation du package :
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerConfiguration dans Program.cs :
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "https://pythonlib.ru", ValidateAudience = true, ValidAudience = "https://api.pythonlib.ru", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes("SuperSecretKey123!SuperSecretKey123!")), ClockSkew = TimeSpan.Zero }; });Génération du jeton (par exemple, dans le contrôleur de connexion) :
var claims = new List<Claim>{ new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.Role, "User"), new Claim("custom_claim", "value")};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!"));var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken( issuer: "https://pythonlib.ru", audience: "https://api.pythonlib.ru", claims: claims, expires: DateTime.Now.AddHours(2), signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });Protection d'un endpoint :
[Authorize][HttpGet("profile")]public IActionResult GetProfile(){ var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return Ok(new { Message = "Accès autorisé", UserId = userId });}3. Authentification par Cookie — classique pour les applications MVC
Pour les applications serveur traditionnelles (Razor Pages, MVC), il est pratique d'utiliser l'authentification par cookie. L'utilisateur reçoit un cookie crypté qui est automatiquement
Aussi dans la bibliothèque
Géolocalisation et cartes en Swift : CoreLocation et MapKit pour iOS/macOS
Protocol Buffers Java : guide complet avec exemples
Travailler avec les jetons JWT en TypeScript : bibliothèque jsonwebtoken et guide complet
Configuration des applications Swift (iOS/macOS) : bonnes pratiques et outils