OAuth 2.0 und JWT-Autorisierung in C#: Ein praktischer Leitfaden

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

Einleitung: Warum werden OAuth 2.0 und JWT in modernen Anwendungen benötigt?

\n

In der modernen Webentwicklung stehen Datensicherheit und Zugriffsverwaltung im Vordergrund. Jeden Tag melden sich Millionen von Benutzern über Google, Facebook oder Unternehmenssysteme bei Anwendungen an, ohne ihre Passwörter direkt weiterzugeben. Genau hier kommen die Protokolle OAuth 2.0 und die Technologie JWT (JSON Web Tokens) ins Spiel.

\n

OAuth 2.0 ist der Industriestandard für die Delegierung des Zugriffs. Es ermöglicht Anwendungen, eingeschränkten Zugriff auf die Ressourcen eines Benutzers zu erhalten, ohne dessen Anmeldeinformationen preiszugeben. JWT wiederum ist ein kompaktes und eigenständiges Token-Format, das alle notwendigen Informationen zur Authentifizierung und Autorisierung enthält.

\n

In diesem Artikel werden wir praktisch erläutern, wie man OAuth 2.0 und JWT-Autorisierung in C# mit ASP.NET Core implementiert. Sie erfahren, wie Sie einen Autorisierungsserver einrichten, Token generieren und Ihre API-Endpunkte schützen. Alle Codebeispiele sind für den Einsatz in realen Projekten bereit.

\n\n

1. Einrichtung des Autorisierungsservers mit IdentityServer4

\n

Für die Implementierung von OAuth 2.0 verwenden wir die beliebte Bibliothek IdentityServer4 – ein Framework für ASP.NET Core, das die Protokolle OpenID Connect und OAuth 2.0 implementiert. Beginnen wir mit der Erstellung eines minimalen Autorisierungsservers.

\n\n

Schritt 1: Installation der Pakete und Erstellung des Projekts

\n

Erstellen Sie ein neues ASP.NET Core Web Application-Projekt (leere Vorlage) und installieren Sie die erforderlichen NuGet-Pakete:

\n
dotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
\n\n

Schritt 2: Konfiguration von Clients und Ressourcen

\n

Definieren Sie Testbenutzer, Clients und geschützte Ressourcen. Erstellen Sie die Klasse Config.cs:

\n
public static class Config\n{\n    public static IEnumerable<IdentityResource> IdentityResources =>\n        new[] { new IdentityResources.OpenId(), new IdentityResources.Profile() };\n\n    public static IEnumerable<ApiScope> ApiScopes =>\n        new[] { new ApiScope("api1", "My API") };\n\n    public static IEnumerable<Client> Clients =>\n        new[]\n        {\n            new Client\n            {\n                ClientId = "client",\n                AllowedGrantTypes = GrantTypes.ClientCredentials,\n                ClientSecrets = { new Secret("secret".Sha256()) },\n                AllowedScopes = { "api1" }\n            }\n        };\n}
\n\n

Schritt 3: Registrierung der Dienste in Startup.cs

\n

Konfigurieren Sie IdentityServer in der Methode ConfigureServices:

\n
public void ConfigureServices(IServiceCollection services)\n{\n    services.AddIdentityServer()\n        .AddInMemoryIdentityResources(Config.IdentityResources)\n        .AddInMemoryApiScopes(Config.ApiScopes)\n        .AddInMemoryClients(Config.Clients)\n        .AddTestUsers(TestUsers.Users);\n\n    services.AddAuthentication()\n        .AddJwtBearer("Bearer", options =>\n        {\n            options.Authority = "https://localhost:5001";\n            options.TokenValidationParameters = new TokenValidationParameters\n            {\n                ValidateAudience = false\n            };\n        });\n}
\n

Fügen Sie in der Methode Configure den Aufruf app.UseIdentityServer() hinzu.

\n\n

2. Implementierung von JWT-Token: Generierung und Validierung

\n

Ein JWT-Token besteht aus drei Teilen: Header, Payload und Signatur. In .NET erfolgt die Generierung und Überprüfung von JWT mit integrierten Mechanismen.

\n\n

Manuelle Generierung eines JWT-Tokens

\n

Manchmal ist es erforderlich, ein Token manuell zu erstellen, z. B. zum Testen. Verwenden Sie den folgenden Code:

\n
using System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI                

Blogs

Buchempfehlungen