OAuth 2.0 und JWT-Autorisierung in C#: Schritt-für-Schritt-Anleitung für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in OAuth 2.0 und JWT in C#

\n

Moderne Webanwendungen erfordern zuverlässige Sicherheitsmechanismen. Zwei Schlüsselprotokolle – OAuth 2.0 und JWT (JSON Web Token) – sind zum De-facto-Standard für die Implementierung von Autorisierung und Authentifizierung geworden. In diesem Artikel werden wir untersuchen, wie diese Technologien im C# (.NET)-Ökosystem eingesetzt werden.

\n

OAuth 2.0 ist ein Protokoll für delegierten Zugriff, das es Anwendungen ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu erhalten, ohne deren Anmeldeinformationen weiterzugeben. JWT wiederum ist ein kompaktes und in sich geschlossenes Token-Format, das häufig zur Übertragung von Authentifizierungsinformationen zwischen Client und Server verwendet wird.

\n

In dieser Anleitung erstellen wir eine einfache Web-API mit ASP.NET Core, die OAuth 2.0 unter Verwendung von JWT-Token implementiert. Sie erfahren, wie Sie die Generierung, Validierung und den Schutz von Endpunkten konfigurieren.

\n\n

Was sind OAuth 2.0 und JWT?

\n

Bevor wir zum Code übergehen, lassen Sie uns die grundlegenden Konzepte erläutern.

\n

OAuth 2.0

\n

OAuth 2.0 definiert vier Rollen:

\n
    \n
  • Resource Owner (Ressourceninhaber) – in der Regel der Benutzer.
  • \n
  • Client (Client) – die Anwendung, die Zugriff erhalten möchte.
  • \n
  • Authorization Server (Autorisierungsserver) – stellt Token aus.
  • \n
  • Resource Server (Ressourcenserver) – stellt geschützte Daten bereit.
  • \n
\n

Der Hauptablauf des Authorization Code Grant umfasst: Weiterleitung des Benutzers an den Autorisierungsserver, Erhalt eines Codes, Austausch des Codes gegen ein Zugriffstoken.

\n\n

JWT (JSON Web Token)

\n

JWT besteht aus drei Teilen, die durch Punkte getrennt sind:

\n
    \n
  • Header – Tokentyp und Signaturalgorithmus (z. B. HS256).
  • \n
  • Payload – Daten (Claims), wie Benutzer-ID, Rolle, Gültigkeitsdauer.
  • \n
  • Signature – Signatur, die mit einem geheimen Schlüssel erstellt wurde.
  • \n
\n

Beispiel eines JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Einrichten des ASP.NET Core-Projekts

\n

Wir erstellen ein neues Web-API-Projekt mit Authentifizierungsunterstützung.

\n
dotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo
\n

Fügen wir die erforderlichen NuGet-Pakete hinzu:

\n
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt
\n\n

Konfiguration in appsettings.json

\n

Fügen Sie einen Abschnitt für JWT-Einstellungen in die Datei appsettings.json ein:

\n
{\n  "JwtSettings": {\n    "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n    "Issuer": "OAuthJwtDemo",\n    "Audience": "OAuthJwtDemoClient",\n    "ExpirationMinutes": 60\n  }\n}
\n

Wichtig: In einem realen Projekt speichern Sie den geheimen Schlüssel in User Secrets oder Azure Key Vault.

\n\n

Implementierung des JWT-Generierungsdienstes

\n

Wir erstellen ein Interface und dessen Implementierung für die Arbeit mit Token.

\n

Interface IJwtService

\n
public interface IJwtService\n{\n    string GenerateToken(string userId, string role);\n    ClaimsPrincipal ValidateToken(string token);\n}
\n\n

Implementierung von JwtService

\n
public class JwtService : IJwtService\n{\n    private readonly JwtSettings _settings;\n\n    public JwtService(IOptions<JwtSettings> settings)\n    {\n        _settings = settings.Value;\n    }\n\n    public string GenerateToken(string userId, string role)\n    {\n        var claims = new[]\n        {\n            new Claim(ClaimTypes.NameIdentifier, userId),\n            new Claim(ClaimTypes.Role, role),\n            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n        };\n\n        var key = new Symmetric                

Blogs

Buchempfehlungen