JWT-struktur og claims
Forstå header, payload og signatur.
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_adQssw5cHeaderen
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– utstedersub– subjekt (bruker-ID-en)aud– målgruppeexp– utløpstidspunkt (Unix-sekunder)nbf– ikke gyldig føriat– 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' claimHvorfor 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 minutesHurtigsjekk
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 viaUser.
Deretter skal du konfigurere ASP.NET Core til å validere disse tokenene.
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
- JWT-struktur og claims
- Konfigurere JWT Bearer-autentisering
- Utstede token
- Refresh-token og utløp