JWT-Struktur und Claims
Verstehen Sie Header, Payload und Signatur.
JWT-Struktur und Claims ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein JWT?
Ein JSON Web Token (JWT) ist ein kompaktes, URL-sicheres Token-Format, mit dem Claims sicher zwischen zwei Parteien übertragen werden. In ASP.NET Core ist es die gängigste Methode, zustandslose APIs zu authentifizieren.
Ein JWT ist lediglich eine Zeichenfolge aus drei Base64Url-kodierten Teilen, die durch Punkte verbunden sind: header.payload.signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cDer Header
Der Header beschreibt, wie das Token signiert ist. Er ist ein kleines JSON-Objekt, das in das erste Segment Base64Url-kodiert wird.
alg bezeichnet den Signaturalgorithmus, beispielsweise HS256 oder RS256, und typ ist fast immer JWT.
{
"alg": "HS256",
"typ": "JWT"
}Die Payload
Die Payload enthält die Claims – Aussagen über den Benutzer und Metadaten zum Token. Sie ist das zweite Segment.
Wichtig: Die Payload ist lediglich kodiert, nicht verschlüsselt. Jeder kann sie dekodieren. Legen Sie daher niemals Geheimnisse darin ab.
{
"sub": "1234",
"name": "Alice",
"role": "admin",
"exp": 1735689600
}Die Signatur
Die Signatur garantiert, dass das Token nicht manipuliert wurde. Der Server berechnet sie aus dem kodierten Header, der kodierten Payload und einem geheimen Schlüssel.
Wenn jemand auch nur ein einzelnes Zeichen der Payload ändert, stimmt die Signatur nicht mehr überein und die Validierung schlägt fehl.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)Registrierte Claims
Einige Claim-Namen sind durch die JWT-Spezifikation (RFC 7519) standardisiert. Sie verwenden kurze Schlüssel aus drei Buchstaben:
iss– Ausstellersub– Subjekt (die Benutzer-ID)aud– Zielgruppeexp– Ablaufzeit (Unix-Sekunden)nbf– noch nicht gültig voriat– Ausgestellt am
{
"iss": "https://api.myapp.com",
"aud": "myapp-clients",
"sub": "42",
"exp": 1735689600,
"iat": 1735686000
}Benutzerdefinierte Claims
Zusätzlich zu den registrierten Claims können Sie beliebige benutzerdefinierte Claims hinzufügen, die Ihre Anwendung benötigt – Rollen, Berechtigungen, Mandanten-IDs, E-Mail-Adressen und vieles mehr.
Halten Sie die Payload klein: Jeder Claim wird bei jeder Anfrage übertragen.
{
"sub": "42",
"email": "alice@myapp.com",
"role": "admin",
"tenant_id": "acme",
"permissions": ["orders:read", "orders:write"]
}Claims in ASP.NET Core
In .NET werden Claims durch den Typ System.Security.Claims.Claim modelliert. Jeder Claim ist ein Typ-/Wert-Paar.
Bei der Validierung eines JWT wandelt ASP.NET Core jeden Payload-Eintrag in einen Claim im ClaimsPrincipal des Benutzers um.
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, "42"),
new Claim(ClaimTypes.Name, "Alice"),
new Claim(ClaimTypes.Role, "admin"),
new Claim("tenant_id", "acme")
};ClaimsPrincipal und ClaimsIdentity
Ein authentifizierter Benutzer wird durch einen ClaimsPrincipal dargestellt. Dieser umschließt mindestens ein ClaimsIdentity-Objekt, das jeweils eine Gruppe von Claims enthält.
In einem Controller greifen Sie über User darauf zu.
// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;Zuordnung von Claim-Typen
Standardmäßig ordnet der JWT-Handler kurze JWT-Schlüssel langen Claim-Typen im URI-Format zu (beispielsweise wird sub zu ClaimTypes.NameIdentifier).
Um die ursprünglichen kurzen Namen beizubehalten, deaktivieren Sie die eingehende Zuordnung einmalig beim Start der Anwendung.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claimWarum nicht einfach ein Sitzungs-Cookie?
JWTs sind in sich geschlossen: Der Server kann sie ausschließlich mit dem Signaturschlüssel validieren, ohne eine Datenbankabfrage oder einen serverseitigen Sitzungsspeicher.
Dadurch eignen sie sich ideal für horizontal skalierte APIs und Microservices, bei denen jeder Knoten dasselbe Token überprüfen kann.
// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...Der Nachteil: Widerruf
Da ein JWT in sich geschlossen und bis zu seinem Ablaufzeitpunkt vertrauenswürdig ist, können Sie es vor dem Zeitpunkt exp nicht ohne Weiteres widerrufen.
Üblicherweise begegnet man diesem Problem mit kurzlebigen Access-Tokens, die mit Refresh-Tokens kombiniert werden (dies wird später in diesem Kurs behandelt).
// Short-lived access token
exp = iat + 15 * 60; // 15 minutesKurzer Test
Testen Sie Ihr Verständnis des Aufbaus von JWTs.
Zusammenfassung
Sie haben den Aufbau eines JWT und die Funktionsweise von Claims in ASP.NET Core kennengelernt:
- Ein JWT besteht aus
header.payload.signature, wobei jeder Teil Base64Url-kodiert ist. - Der Payload enthält registrierte und benutzerdefinierte Claims, die kodiert, aber nicht verschlüsselt sind.
- Die Signatur gewährleistet die Integrität mithilfe eines geheimen Schlüssels oder eines Schlüsselpaares.
- .NET wandelt Claims in einen
ClaimsPrincipalum, auf den Sie überUserzugreifen.
Als Nächstes konfigurieren Sie ASP.NET Core so, dass diese Tokens validiert werden.
Lerne C# mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 93
- Lektionen
- 346
Häufig gestellte Fragen
Ist die Lektion „JWT-Struktur und Claims“ kostenlos?
Ja — der vollständige Text von „JWT-Struktur und Claims“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „JWT-Struktur und Claims“?
Verstehen Sie Header, Payload und Signatur. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „JWT-Struktur und Claims“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- JWT-Struktur und Claims
- JWT-Bearer-Authentifizierung konfigurieren
- Tokens ausstellen
- Refresh-Tokens und Ablauf