C# Academy · Lektion

JWT-struktur og claims

Forstå header, payload og signatur.

Lektion 1 af 413 trin

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_adQssw5c

Headeren

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 – udsteder
  • sub – emne (bruger-id'et)
  • aud – målgruppe
  • exp – udløbstidspunkt (Unix-sekunder)
  • nbf – ikke gyldig før
  • iat – 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' claim

Hvorfor 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 minutes

Hurtigt 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 via User.

Næste gang konfigurerer du ASP.NET Core til at validere disse tokens.

Gratis at komme i gang

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

  1. JWT-struktur og claims
  2. Konfiguration af JWT Bearer Authentication
  3. Udstedelse af tokens
  4. Refresh tokens og udløb
← Tilbage til C# Academy