JWT:n rakenne ja claimit
Ymmärtäkää otsake, hyötykuorma ja allekirjoitus.
JWT:n rakenne ja claimit on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on JWT?
JSON Web Token (JWT) on tiivis ja URL-ystävällinen tunnusmuoto, jota käytetään väitteiden turvalliseen välittämiseen kahden osapuolen välillä. ASP.NET Core -sovelluksissa se on yleisin tapa todentaa tilattomia ohjelmointirajapintoja.
JWT on yksinkertaisesti merkkijono, joka koostuu kolmesta Base64Url-koodatusta osasta. Osat on yhdistetty pisteillä: header.payload.signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cOtsake
Otsake kuvaa, miten tunnus allekirjoitetaan. Se on pieni JSON-olio, joka Base64Url-koodataan ensimmäiseksi osaksi.
alg ilmoittaa allekirjoitusalgoritmin, kuten HS256 tai RS256, ja typ on lähes aina JWT.
{
"alg": "HS256",
"typ": "JWT"
}Hyötykuorma
Hyötykuorma sisältää väitteet eli käyttäjää koskevat tiedot ja tunnuksen metatiedot. Se on toinen osa.
Tärkeää: hyötykuorma vain koodataan, sitä ei salata. Kuka tahansa voi purkaa sen koodauksen, joten älkää koskaan sijoittako siihen salaisuuksia.
{
"sub": "1234",
"name": "Alice",
"role": "admin",
"exp": 1735689600
}Allekirjoitus
Allekirjoitus takaa, ettei tunnusta ole muutettu. Palvelin laskee sen koodatusta otsakkeesta, koodatusta hyötykuormasta ja salaisesta avaimesta.
Jos joku muuttaa hyötykuorman yhtäkin merkkiä, allekirjoitus ei enää täsmää ja vahvistus epäonnistuu.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)Rekisteröidyt väitteet
JWT-määritys (RFC 7519) standardoi joitakin väitteiden nimiä. Niissä käytetään lyhyitä, kolmen kirjaimen avaimia:
iss– myöntäjäsub– aihe (käyttäjän tunnus)aud– kohdeyleisöexp– vanhenemisaika (Unix-sekunteina)nbf– ei voimassa ennen tätä ajankohtaaiat– myöntämisajankohta
{
"iss": "https://api.myapp.com",
"aud": "myapp-clients",
"sub": "42",
"exp": 1735689600,
"iat": 1735686000
}Mukautetut väitteet
Rekisteröityjen väitteiden lisäksi voitte lisätä sovelluksen tarvitsemia mukautettuja väitteitä, kuten rooleja, käyttöoikeuksia, vuokraajatunnuksia, sähköpostiosoitteen ja paljon muuta.
Pidättehän hyötykuorman pienenä: jokainen väite kulkee jokaisessa pyynnössä.
{
"sub": "42",
"email": "alice@myapp.com",
"role": "admin",
"tenant_id": "acme",
"permissions": ["orders:read", "orders:write"]
}Claimit ASP.NET Coressa
.NETissä claimit mallinnetaan System.Security.Claims.Claim-tyypillä. Kukin claim muodostuu tyypin / arvon parista.
Kun JWT validoidaan, ASP.NET Core muuntaa jokaisen hyötykuorman alkion käyttäjän ClaimsPrincipal-olioon kuuluvaksi Claim-olioksi.
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 ja ClaimsIdentity
Todennettu käyttäjä esitetään ClaimsPrincipal-oliona, joka sisältää yhden tai useamman ClaimsIdentity-olion, joissa jokaisessa on joukko claimeja.
Ohjaimessa siihen pääsee käsiksi User-ominaisuuden kautta.
// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;Claim-tyyppien yhdistäminen
Oletusarvoisesti JWT-käsittelijä yhdistää lyhyet JWT-avaimet pitkiin URI-tyylisiin claim-tyyppeihin (esimerkiksi sub muuttuu muotoon ClaimTypes.NameIdentifier).
Jos haluat säilyttää alkuperäiset lyhyet nimet, poista saapuvien claim-tyyppien yhdistäminen käytöstä kerran sovelluksen käynnistyksen yhteydessä.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claimMiksi istuntoeväste ei yksin riitä
JWT:t ovat itsesisältöisiä: palvelin voi validoida ne pelkän allekirjoitusavaimen avulla ilman tietokantahakua tai palvelimella säilytettävää istuntoa.
Tämän ansiosta ne sopivat erinomaisesti vaakasuunnassa skaalattuihin API-palveluihin ja mikropalveluihin, joissa mikä tahansa solmu voi tarkistaa saman tokenin.
// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...Kääntöpuoli: mitätöinti
Koska JWT on itsesisältöinen ja luotettu vanhenemiseensa asti, sitä ei voi helposti mitätöidä ennen sen exp-ajankohtaa.
Yleinen ratkaisu on käyttää lyhytikäisiä access tokeneita yhdessä refresh tokenien kanssa (niitä käsitellään myöhemmin tällä kurssilla).
// Short-lived access token
exp = iat + 15 * 60; // 15 minutesPikatesti
Testaa, miten hyvin ymmärrät JWT:n rakenteen.
Kertaus
Opit JWT:n rakenteen ja sen, miten claimit toimivat ASP.NET Coressa:
- JWT on muotoa
header.payload.signature, ja jokainen osa on Base64Url-koodattu. - Hyötykuorma sisältää rekisteröityjä ja mukautettuja claimeja, jotka on koodattu mutta joita ei ole salattu.
- Allekirjoitus takaa eheyden salaisuuden tai avainparin avulla.
- .NET muuntaa claimit
ClaimsPrincipal-olioksi, jota luetaanUser-ominaisuuden kautta.
Seuraavaksi määrität ASP.NET Coren validoimaan nämä tokenit.
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”JWT:n rakenne ja claimit” ilmainen?
Kyllä – oppitunnin ”JWT:n rakenne ja claimit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”JWT:n rakenne ja claimit”?
Ymmärtäkää otsake, hyötykuorma ja allekirjoitus. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”JWT:n rakenne ja claimit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- JWT:n rakenne ja claimit
- JWT Bearer -tunnistautumisen määrittäminen
- Tunnisteiden myöntäminen
- Päivitystunnisteet ja vanheneminen