Autorisation et authentification en C# (.NET) : guide complet

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

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.JwtBearer


Configuration 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

Recommendations