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) : Guide complet



La sécurité des applications web est la pierre angulaire du développement moderne. Dans l'écosystème C# (.NET), les mécanismes intégrés d'authentification et d'autorisation permettent de protéger votre application de manière flexible et fiable. Dans cet article, nous allons détailler les concepts clés, les outils et les exemples de code pour travailler avec Identity, JWT et le modèle basé sur les rôles.



1. Concepts de base

Avant de passer au code, il est important de distinguer deux termes :

  • Authentification — le processus de vérification de l'identité de l'utilisateur (qui êtes-vous ?). Généralement effectué via un identifiant/mot de passe, des jetons ou des fournisseurs externes.
  • Autorisation — le processus de détermination des droits d'accès (que pouvez-vous faire ?). Implémentée via des rôles, des politiques ou des claims.


2. ASP.NET Core Identity — solution intégrée

Microsoft.AspNetCore.Identity est un système complet de gestion des utilisateurs qui inclut l'inscription, la connexion, la réinitialisation du mot de passe, l'authentification à deux facteurs et bien plus encore. Il fonctionne avec Entity Framework Core et prend en charge n'importe quel stockage de données.



Installation :

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCoredotnet add package Microsoft.EntityFrameworkCore.SqlServer


Exemple d'inscription d'un utilisateur (contrôleur Account) :

public class AccountController : Controller{    private readonly UserManager<IdentityUser> _userManager;    private readonly SignInManager<IdentityUser> _signInManager;

public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager) { _userManager = userManager; _signInManager = signInManager; }

[HttpPost] public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new IdentityUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); } return View(model); }}


3. JWT (JSON Web Tokens) — authentification sans état

Pour les SPA modernes (React, Angular) ou les applications mobiles, on utilise souvent JWT. Le jeton est signé par le serveur et contient des claims (revendications) sur l'utilisateur. Le serveur ne stocke pas de sessions, ce qui simplifie la mise à l'échelle.



Configuration dans Program.cs :

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)    .AddJwtBearer(options =>    {        options.TokenValidationParameters = new TokenValidationParameters        {            ValidateIssuer = true,            ValidIssuer = builder.Configuration["Jwt:Issuer"],            ValidateAudience = true,            ValidAudience = builder.Configuration["Jwt:Audience"],            ValidateLifetime = true,            IssuerSigningKey = new SymmetricSecurityKey(                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))        };    });


Génération du jeton :

public string GenerateToken(IdentityUser user){    var claims = new[]    {        new Claim(ClaimTypes.NameIdentifier, user.Id),        new Claim(ClaimTypes.Email, user.Email),        new Claim(ClaimTypes.Role, "User")    };

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

va

Recommendations