JWT-Tokens in C# (.NET): Vollständiger Leitfaden mit Beispielen

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-Tokens in C# (.NET): Erstellung, Überprüfung und Validierung



JSON Web Token (JWT) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstokens, die auf dem JSON-Format basieren. JWT wird häufig in modernen Webanwendungen zur Authentifizierung und zum Informationsaustausch zwischen Client und Server verwendet. In diesem Artikel werden wir detailliert betrachten, wie man mit JWT-Tokens im C# (.NET)-Ökosystem arbeitet, einschließlich Erstellung, Signatur, Überprüfung und Validierung von Tokens.



Grundlegende Komponenten von JWT



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

  • Header – enthält Informationen über den Tokentyp und den Signaturalgorithmus
  • Payload – die Nutzlast mit Daten (Claims)
  • Signature – die Signatur, die die Integrität des Tokens gewährleistet


Beispiel eines JWT-Tokens: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c



Installation der erforderlichen Pakete



Für die Arbeit mit JWT in .NET muss das Paket System.IdentityModel.Tokens.Jwt installiert werden. Dies kann über den NuGet Package Manager oder mit der .NET CLI erfolgen:



dotnet add package System.IdentityModel.Tokens.Jwt


Möglicherweise ist auch die Installation von Microsoft.AspNetCore.Authentication.JwtBearer für die Integration mit ASP.NET Core erforderlich:



dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer


Erstellung eines JWT-Tokens in C#



Betrachten wir ein vollständiges Beispiel zur Erstellung eines JWT-Tokens mit einem symmetrischen Schlüssel (HMAC SHA256):



using System;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;using Microsoft.IdentityModel.Tokens;

public class JwtService{ private readonly string _secretKey; private readonly string _issuer; private readonly string _audience;

public JwtService(string secretKey, string issuer, string audience) { _secretKey = secretKey; _issuer = issuer; _audience = audience; }

public string GenerateToken(string userId, string userName, string role) { var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

var claims = new[] { new Claim(ClaimTypes.NameIdentifier, userId), new Claim(ClaimTypes.Name, userName), new Claim(ClaimTypes.Role, role), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) };

var token = new JwtSecurityToken( issuer: _issuer, audience: _audience, claims: claims, expires: DateTime.UtcNow.AddHours(1), signingCredentials: credentials );

return new JwtSecurityTokenHandler().WriteToken(token); }}


Überprüfung und Validierung eines JWT-Tokens



Zur Authentifizierung und zum Extrahieren von Daten aus dem Token wird die Methode ValidateToken verwendet:



public ClaimsPrincipal ValidateToken(string token){    var tokenHandler = new JwtSecurityTokenHandler();    var key = Encoding.UTF8.GetBytes(_secretKey);

try { var principal = tokenHandler.ValidateToken(token, new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = _issuer, ValidateAudience = true, ValidAudience = _audience, ValidateLifetime = true, ClockSkew = TimeSpan.Zero\

Empfehlungen