Autorisierung und Authentifizierung in C# (.NET): Vollständiger Leitfaden
Die Sicherheit von Webanwendungen ist ein Eckpfeiler der modernen Entwicklung. Im C# (.NET)-Ökosystem ermöglichen integrierte Authentifizierungs- und Autorisierungsmechanismen einen flexiblen und zuverlässigen Schutz Ihrer Anwendung. In diesem Artikel werden wir die wichtigsten Konzepte, Tools und Codebeispiele für die Arbeit mit Identity, JWT und dem Rollenmodell erläutern.
1. Grundlegende Konzepte
Bevor wir zum Code übergehen, ist es wichtig, zwei Begriffe zu unterscheiden:
- Authentifizierung – der Prozess der Überprüfung der Identität eines Benutzers (Wer sind Sie?). Dies erfolgt normalerweise über Login/Passwort, Token oder externe Anbieter.
- Autorisierung – der Prozess der Bestimmung von Zugriffsrechten (Was dürfen Sie tun?). Dies wird durch Rollen, Richtlinien oder Claims umgesetzt.
2. ASP.NET Core Identity – Integrierte Lösung
Microsoft.AspNetCore.Identity ist ein vollwertiges Benutzerverwaltungssystem, das Registrierung, Anmeldung, Passwortzurücksetzung, Zwei-Faktor-Authentifizierung und vieles mehr umfasst. Es arbeitet mit Entity Framework Core zusammen und unterstützt beliebige Datenspeicher.
Installation:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCoredotnet add package Microsoft.EntityFrameworkCore.SqlServerBeispiel für die Benutzerregistrierung (Account-Controller):
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) – Zustandslose Authentifizierung
Für moderne SPAs (React, Angular) oder mobile Anwendungen wird häufig JWT verwendet. Der Token wird vom Server signiert und enthält Claims (Aussagen) über den Benutzer. Der Server speichert keine Sitzungen, was die Skalierung vereinfacht.
Konfiguration in 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"])) }; });Token-Generierung:
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 Auch in der Bibliothek
Arbeiten mit ZIP-Archiven in Go: Vollständige Anleitung zum Paket archive/zip
Maschinelles Lernen mit Kotlin: Überblick über die Bibliotheken KMath, Smile, KotlinDL und DeepLearning4J
SwiftConfig