Einführung in OAuth 2.0 und JWT mit C#
Moderne Webanwendungen und APIs benötigen ein zuverlässiges Autorisierungssystem. Die beiden bekanntesten Standards – OAuth 2.0 (Delegierungsprotokoll für den Zugriff) und JWT (JSON Web Token, Token-Format) – sind zur Grundlage der Sicherheit im .NET-Ökosystem geworden. In diesem Artikel werden wir uns ansehen, wie man OAuth 2.0 und JWT-Autorisierung mit C# in ASP.NET Core implementiert, ein Beispiel für einen Autorisierungsserver erstellen und eine API schützen.
Unabhängig davon, ob Sie eine monolithische Anwendung oder eine Microservices-Architektur erstellen, ist das Verständnis dieser Mechanismen von entscheidender Bedeutung. OAuth 2.0 definiert Rollen (Client, Autorisierungsserver, Ressourcenserver), während JWT eine kompakte und eigenständige Möglichkeit zur Übertragung von Benutzerdaten darstellt.
Grundlagen von OAuth 2.0: Abläufe und Rollen
Was ist OAuth 2.0?
OAuth 2.0 ist ein Autorisierungsprotokoll, das es Drittanbieteranwendungen ermöglicht, eingeschränkten Zugriff auf die Ressourcen eines Benutzers zu erhalten, ohne dessen Anmeldeinformationen weiterzugeben. Anstelle von Login und Passwort werden Access Tokens verwendet.
Hauptrollen in OAuth 2.0
- Resource Owner – der Benutzer, der die Daten besitzt.
- Client – die Anwendung, die Zugriff anfordert.
- Authorization Server – der Server, der nach der Authentifizierung Tokens ausstellt.
- Resource Server – die API, die Ressourcen schützt und Tokens überprüft.
Beliebte Abläufe (Grant Types)
- Authorization Code – für Serveranwendungen (am sichersten).
- Client Credentials – für die Kommunikation zwischen Servern (ohne Benutzer).
- Implicit – veraltet, wird nicht empfohlen.
- Refresh Token – um ein neues Access Token zu erhalten, ohne das Passwort erneut eingeben zu müssen.
JWT (JSON Web Token): Struktur und Funktionsweise
Woraus besteht ein JWT?
Ein JWT ist eine Zeichenkette, die aus drei durch Punkte getrennten Teilen besteht:
header.payload.signature- Header – Token-Typ und Signaturalgorithmus (z. B. HS256 oder RS256).
- Payload – die Daten (Claims): Benutzer-ID, Rollen, Ablaufdatum usw.
- Signature – die Signatur, die überprüft, dass das Token nicht verändert wurde.
Vorteile von JWT für C#
- Eigenständigkeit – alle Benutzerdaten sind im Token enthalten.
- Einfache Überprüfung auf der Seite des Ressourcenservers ohne Datenbankzugriff.
- Unterstützung in .NET durch die Bibliothek
Microsoft.AspNetCore.Authentication.JwtBearer.
Implementierung von OAuth 2.0 + JWT mit C# in ASP.NET Core
1. Einrichtung des Autorisierungsservers (JWT-Ausstellung)
Wir erstellen einen minimalen Server, der Login/Passwort entgegennimmt und ein JWT zurückgibt. Der Einfachheit halber verwenden wir einen symmetrischen Schlüssel (HS256).
// Program.cs – Autorisierungsserverusing Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;
var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "MyAuthServer", ValidAudience = "MyApiClient", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!@#$%")) }; });
builder.Services.AddAuthorization();var app = builder.Build();
app.MapPost(
```