C# Academy · leksjon

JWT-struktur og claims

Forstå header, payload og signatur.

Leksjon 1 av 413 trinn

JWT-struktur og claims er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 4 leksjoner.

Hva er en JWT?

Et JSON Web Token (JWT) er et kompakt og URL-sikkert tokenformat som brukes til å overføre claims sikkert mellom to parter. I ASP.NET Core er det den vanligste måten å autentisere tilstandsløse API-er på.

En JWT er bare en streng som består av tre Base64Url-kodede deler adskilt med punktum: header.payload.signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Headeren

Headeren beskriver hvordan tokenet signeres. Det er et lite JSON-objekt som Base64Url-kodes til det første segmentet.

alg angir signeringsalgoritmen, for eksempel HS256 eller RS256, og typ er nesten alltid JWT.

{
  "alg": "HS256",
  "typ": "JWT"
}

Payloaden

Payloaden inneholder claims – utsagn om brukeren og metadata om tokenet. Den utgjør det andre segmentet.

Viktig: Payloaden er bare kodet, ikke kryptert. Alle kan dekode den, så legg aldri hemmeligheter her.

{
  "sub": "1234",
  "name": "Alice",
  "role": "admin",
  "exp": 1735689600
}

Signaturen

Signaturen sikrer at tokenet ikke er blitt manipulert. Serveren beregner den ut fra den kodede headeren, den kodede payloaden og en hemmelig nøkkel.

Hvis noen endrer ett eneste tegn i payloaden, samsvarer signaturen ikke lenger, og valideringen mislykkes.

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secretKey
)

Registrerte claims

Noen claim-navn er standardisert av JWT-spesifikasjonen (RFC 7519). De bruker korte nøkler på tre bokstaver:

  • iss – utsteder
  • sub – subjekt (bruker-ID-en)
  • aud – målgruppe
  • exp – utløpstidspunkt (Unix-sekunder)
  • nbf – ikke gyldig før
  • iat – utstedt
{
  "iss": "https://api.myapp.com",
  "aud": "myapp-clients",
  "sub": "42",
  "exp": 1735689600,
  "iat": 1735686000
}

Egendefinerte claims

I tillegg til det registrerte settet kan De legge til alle egendefinerte claims programmet Deres trenger – roller, tillatelser, tenant-ID-er, e-post og mer.

Hold payloaden liten: Hver claim sendes med hver forespørsel.

{
  "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 av typen System.Security.Claims.Claim. Hver claim er et par med type / verdi.

Når en JWT er validert, gjør ASP.NET Core hver oppføring i payloaden om til en Claim på brukerens 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 autentisert bruker representeres av en ClaimsPrincipal, som omslutter ett eller flere ClaimsIdentity-objekter. Hvert av dem inneholder et sett med claims.

I en controller får du tilgang til den gjennom User.

// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;

Tilordning av claim-typer

Som standard tilordner JWT-håndtereren korte JWT-nøkler til lange URI-lignende claim-typer (for eksempel blir sub til ClaimTypes.NameIdentifier).

Hvis du vil beholde de opprinnelige, korte navnene, deaktiverer du den innkommende tilordningen én gang ved oppstart.

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claim

Hvorfor ikke bare en sesjonscookie?

JWT-er er selvinnholdte: Serveren kan validere dem bare ved hjelp av signeringsnøkkelen, uten oppslag i databasen eller et sesjonslager på serversiden.

Dette gjør dem ideelle for horisontalt skalerte API-er og mikrotjenester, der alle noder kan validere det samme tokenet.

// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...

Avveiningen: tilbakekalling

Fordi en JWT er selvinnholdt og har tillit frem til den utløper, kan du ikke enkelt tilbakekalle den før tidspunktet i exp.

Det vanligste tiltaket er å bruke kortvarige access-tokens sammen med refresh-tokens (dette dekkes senere i kurset).

// Short-lived access token
exp = iat + 15 * 60;  // 15 minutes

Hurtigsjekk

Kontroller forståelsen av JWT-strukturen.

Oppsummering

Du har lært hvordan en JWT er bygget opp, og hvordan claims fungerer i ASP.NET Core:

  • En JWT består av header.payload.signature, der hver del er Base64Url-kodet.
  • Payloaden inneholder registrerte og egendefinerte claims, som er kodet, men ikke kryptert.
  • Signaturen sikrer integriteten ved hjelp av en hemmelighet eller et nøkkelpar.
  • .NET gjør claims tilgjengelige i en ClaimsPrincipal, som du leser via User.

Deretter skal du konfigurere ASP.NET Core til å validere disse tokenene.

Gratis å komme i gang

Lær deg C# med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
93
Leksjoner
346

Ofte stilte spørsmål

Er leksjonen «JWT-struktur og claims» gratis?

Ja – hele teksten i «JWT-struktur og claims» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «JWT-struktur og claims»?

Forstå header, payload og signatur. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C# Academy?

Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «JWT-struktur og claims»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?

Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. JWT-struktur og claims
  2. Konfigurere JWT Bearer-autentisering
  3. Utstede token
  4. Refresh-token og utløp
← Tilbake til C# Academy