Autorisierung und Authentifizierung in C# (.NET): Von den Grundlagen bis zu Unternehmenslösungen
Die Sicherheit von Webanwendungen ist ein kritischer Aspekt der Entwicklung, und im C# (.NET)-Ökosystem gibt es einen leistungsstarken Werkzeugsatz für die Implementierung von Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte). In diesem Artikel werden wir die wichtigsten Ansätze behandeln: von der integrierten ASP.NET Core Identity bis hin zu flexiblen Lösungen auf Basis von JWT und OAuth 2.0.
1. ASP.NET Core Identity – Integriertes Benutzerverwaltungssystem
ASP.NET Core Identity ist ein vollwertiges Framework für Registrierung, Anmeldung, Rollen- und Passwortverwaltung. Es bietet vorgefertigte Modelle (User, Role), einen Speicher (standardmäßig Entity Framework + SQL Server) und Middleware.
// Registrierung in 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();Beispiel eines Controllers mit Schutz:
[Authorize(Roles = "Admin")]public class AdminController : Controller{ public IActionResult Index() => View();}
// Aktuellen Benutzer abrufenvar user = await _userManager.GetUserAsync(User);var roles = await _userManager.GetRolesAsync(user);2. JWT (JSON Web Token) – Nahtlose Authentifizierung für APIs und SPAs
JWT ist ein kompaktes, URL-sicheres Token, das Claims (Aussagen) über den Benutzer enthält. Es ist ideal für REST-APIs, mobile Anwendungen und Single Page Applications (React, Angular, Vue).
Paketinstallation:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerKonfiguration in 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 }; });Token-Generierung (z. B. im Login-Controller):
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) });Endpunktschutz:
[Authorize][HttpGet("profile")]public IActionResult GetProfile(){ var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return Ok(new { Message = "Zugriff gewährt", UserId = userId });}3. Cookie-Authentifizierung – Klassiker für MVC-Anwendungen
Für traditionelle serverseitige Anwendungen (Razor Pages, MVC) ist die Cookie-Authentifizierung praktisch. Der Benutzer erhält ein verschlüsseltes Cookie, das automatisch