JWT-struktur og claims
Forstå header, payload og signatur.
JWT-struktur og claims er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad er en JWT?
En JSON Web Token (JWT) er et kompakt, URL-sikkert tokenformat, der bruges til sikkert at overføre claims mellem to parter. I ASP.NET Core er det den mest almindelige måde at autentificere statsløse API'er på.
En JWT er blot en streng, der består af tre Base64Url-kodede dele, som forbindes med punktummer: header.payload.signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cHeaderen
Headeren beskriver, hvordan tokenet signeres. Det er et lille JSON-objekt, der Base64Url-kodes til det første segment.
alg angiver signeringsalgoritmen, f.eks. HS256 eller RS256, og typ er næsten altid JWT.
{
"alg": "HS256",
"typ": "JWT"
}Payloaden
Payloaden indeholder claims – udsagn om brugeren og metadata om tokenet. Den udgør det andet segment.
Vigtigt: Payloaden er kun kodet, ikke krypteret. Alle kan afkode den, så du må aldrig placere hemmeligheder her.
{
"sub": "1234",
"name": "Alice",
"role": "admin",
"exp": 1735689600
}Signaturen
Signaturen garanterer, at tokenet ikke er blevet ændret. Serveren beregner den ud fra den kodede header, den kodede payload og en hemmelig nøgle.
Hvis nogen ændrer et enkelt tegn i payloaden, passer signaturen ikke længere, og valideringen mislykkes.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)Registrerede claims
Nogle claim-navne er standardiserede i JWT-specifikationen (RFC 7519). De bruger korte nøgler på tre bogstaver:
iss– udstedersub– emne (bruger-id'et)aud– målgruppeexp– udløbstidspunkt (Unix-sekunder)nbf– ikke gyldig føriat– udstedt på
{
"iss": "https://api.myapp.com",
"aud": "myapp-clients",
"sub": "42",
"exp": 1735689600,
"iat": 1735686000
}Brugerdefinerede claims
Ud over det registrerede sæt kan du tilføje alle de brugerdefinerede claims, din applikation har brug for – roller, tilladelser, tenant-id'er, e-mail og meget mere.
Hold payloaden lille: Hvert claim sendes med på hver forespørgsel.
{
"sub": "42",
"email": "alice@myapp.com",
"role": "admin",
"tenant_id": "acme",
"permissions": ["orders:read", "orders:write"]
}Claims i ASP.NET Core
I .NET modelleres claims af typen System.Security.Claims.Claim. Hvert claim er et par bestående af type / værdi.
Når en JWT valideres, omdanner ASP.NET Core hver post i dens indhold til et Claim på brugerens ClaimsPrincipal.
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 og ClaimsIdentity
En godkendt bruger repræsenteres af en ClaimsPrincipal, som indeholder et eller flere ClaimsIdentity-objekter, der hver indeholder et sæt claims.
I en controller får du adgang til den via User.
// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;Tilknytning af claim-typer
Som standard tilknytter JWT-handleren korte JWT-nøgler til lange claim-typer i URI-format (for eksempel bliver sub til ClaimTypes.NameIdentifier).
Hvis du vil bevare de oprindelige korte navne, skal du deaktivere den indgående tilknytning én gang ved opstart.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claimHvorfor ikke bare en sessionscookie
JWT'er er selvindeholdte: Serveren kan validere dem udelukkende ved hjælp af signeringsnøglen uden opslag i en database eller et sessionslager på serversiden.
Det gør dem ideelle til horisontalt skalerede API'er og mikrotjenester, hvor enhver node kan validere det samme token.
// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...Afvejningen: Tilbagekaldelse
Fordi en JWT er selvindeholdt og betragtes som betroet, indtil den udløber, kan du ikke nemt tilbagekalde den før dens exp-tidspunkt.
Den almindelige modforanstaltning er at bruge kortlivede adgangstokens og kombinere dem med fornyelsestokens (som gennemgås senere i dette kursus).
// Short-lived access token
exp = iat + 15 * 60; // 15 minutesHurtigt tjek
Test din forståelse af JWT-strukturen.
Opsamling
Du har lært, hvordan en JWT er opbygget, og hvordan claims fungerer i ASP.NET Core:
- En JWT har formen
header.payload.signature, hvor hver del er Base64Url-kodet. - Indholdet indeholder registrerede og brugerdefinerede claims, som er kodet, men ikke krypteret.
- Signaturen garanterer integriteten ved hjælp af en hemmelig nøgle eller et nøglepar.
- .NET omdanner claims til en
ClaimsPrincipal, som du læser viaUser.
Næste gang konfigurerer du ASP.NET Core til at validere disse tokens.
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “JWT-struktur og claims” gratis?
Ja — hele teksten til “JWT-struktur og claims” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “JWT-struktur og claims”?
Forstå header, payload og signatur. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “JWT-struktur og claims”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- JWT-struktur og claims
- Konfiguration af JWT Bearer Authentication
- Udstedelse af tokens
- Refresh tokens og udløb