JWT-Token in C# (.NET): Arbeiten mit System.IdentityModel.Tokens.Jwt

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

JWT-Token in C# (.NET): Vollständige Anleitung zur Arbeit mit System.IdentityModel.Tokens.Jwt

\n\n

JSON Web Token (JWT) ist ein kompaktes, URL-sicheres Format zur Übertragung von Daten zwischen Parteien in Form eines JSON-Objekts. Im C# (.NET)-Ökosystem wird für die Arbeit mit JWT die leistungsstarke Bibliothek System.IdentityModel.Tokens.Jwt verwendet, die Teil des Pakets Microsoft.IdentityModel.Tokens ist. Dieses Tool ermöglicht das Generieren, Signieren, Validieren und Dekodieren von JWT-Token und gewährleistet so eine sichere Authentifizierung und Datenübertragung in Webanwendungen, APIs und Microservices.

\n\n

Installation der Bibliothek

\n

Fügen Sie zunächst das NuGet-Paket zu Ihrem Projekt hinzu. Führen Sie den folgenden Befehl in der Paketmanager-Konsole aus:

\n
dotnet add package System.IdentityModel.Tokens.Jwt
\n

Oder über die Package Manager Console in Visual Studio:

\n
Install-Package System.IdentityModel.Tokens.Jwt
\n\n

Hauptkomponenten der Bibliothek

\n
    \n
  • JwtSecurityTokenHandler — die Hauptklasse zum Erstellen, Serialisieren und Validieren von Token.
  • \n
  • SecurityTokenDescriptor — Beschreibung des Tokens: Claims, Lebensdauer, Signatur.
  • \n
  • SymmetricSecurityKey — symmetrischer Schlüssel für die Signatur (HS256, HS384, HS512).
  • \n
  • SigningCredentials — Signaturanmeldeinformationen (Algorithmus + Schlüssel).
  • \n
  • TokenValidationParameters — Validierungsparameter (Überprüfung der Signatur, Lebensdauer, Aussteller).
  • \n
\n\n

Generierung eines JWT-Tokens in C#

\n

Erstellen wir ein einfaches Token mit benutzerdefinierten Claims und einer Lebensdauer von 1 Stunde:

\n
using System.IdentityModel.Tokens.Jwt;\nusing System.Security.Claims;\nusing System.Text;\nusing Microsoft.IdentityModel.Tokens;\n\npublic string GenerateToken()\n{\n    var secretKey = "my_super_secret_key_1234567890!";\n    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));\n    var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);\n\n    var claims = new[]\n    {\n        new Claim(ClaimTypes.Name, "Ivan Petrov"),\n        new Claim(ClaimTypes.Email, "ivan@example.com"),\n        new Claim(ClaimTypes.Role, "Admin")\n    };\n\n    var tokenDescriptor = new SecurityTokenDescriptor\n    {\n        Subject = new ClaimsIdentity(claims),\n        Expires = DateTime.UtcNow.AddHours(1),\n        Issuer = "MyApp",\n        Audience = "MyAppUsers",\n        SigningCredentials = credentials\n    };\n\n    var tokenHandler = new JwtSecurityTokenHandler();\n    var token = tokenHandler.CreateToken(tokenDescriptor);\n    return tokenHandler.WriteToken(token);\n}
\n\n

Validierung (Verifikation) eines JWT-Tokens

\n

Beim Erhalt eines Tokens vom Client müssen dessen Signatur, Gültigkeitsdauer und andere Parameter überprüft werden:

\n
public ClaimsPrincipal ValidateToken(string token)\n{\n    var secretKey = "my_super_secret_key_1234567890!";\n    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));\n\n    var tokenHandler = new JwtSecurityTokenHandler();\n    var validationParameters = new TokenValidationParameters\n    {\n        ValidateIssuer = true,\n        ValidIssuer = "MyApp",\n        ValidateAudience = true,\n        ValidAudience = "MyAppUsers",\n        ValidateLifetime = true,\n        IssuerSigningKey = key,\n        ClockSkew = TimeSpan.Zero // Standard-Zeittoleranz entfernen\n    };\n\n    try\n    {\n        var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);\n        return principal;\n    }\n    catch (SecurityTokenExpiredException)\n    {\n        Console.WriteLine("Token abgelaufen");\n        return null;\n    }\n    catch (SecurityTokenInvalidSignatureException)\n    {\n        Console.WriteLine("Ungültige Token-Signatur");\n        return null;\n    }\n}
\n\n

Dekodieren eines Tokens ohne Signaturprüfung

\n

Manchmal muss man einfach nur

Empfehlungen