0Pricing
C# Academy · Ders

JWT Yapısı ve Talepleri

Üst bilgiyi, yükü ve imzayı anlayın.

JWT Yapısı ve Talepleri, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

JWT Nedir

JSON Web Token (JWT), iki taraf arasında talepleri güvenli biçimde iletmek için kullanılan, kısa ve URL açısından güvenli bir belirteç biçimidir. ASP.NET Core'da durumsuz API'lerde kimlik doğrulamanın en yaygın yoludur.

JWT, noktalarla birleştirilmiş üç Base64Url ile kodlanmış bölümden oluşan bir dizedir: header.payload.signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Üstbilgi

Üstbilgi, belirtecin nasıl imzalandığını açıklar. İlk bölüme Base64Url kodlamasıyla dönüştürülen küçük bir JSON nesnesidir.

alg, imzalama algoritmasını adlandırır (örneğin HS256, RS256); typ ise neredeyse her zaman JWT olur.

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

Yük

Yük, talepleri taşır; bunlar kullanıcı hakkındaki ifadeler ve belirteçle ilgili üst verilerdir. İkinci bölümdür.

Önemli: yük yalnızca kodlanır, şifrelenmez. Herkes yükü çözebilir; bu nedenle gizli bilgileri buraya asla koymayın.

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

İmza

İmza, belirtecin üzerinde oynama yapılmadığını garanti eder. Sunucu imzayı kodlanmış üstbilgiden, kodlanmış yükten ve gizli bir anahtardan hesaplar.

Birisi yükteki tek bir karakteri bile değiştirirse imza artık eşleşmez ve doğrulama başarısız olur.

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

Kayıtlı Talepler

Bazı talep adları JWT belirtimi (RFC 7519) tarafından standartlaştırılmıştır. Bu adlarda üç harfli kısa anahtarlar kullanılır:

  • iss - veren
  • sub - konu (kullanıcı kimliği)
  • aud - hedef kitle
  • exp - sona erme zamanı (Unix saniyesi)
  • nbf - şu zamandan önce geçerli değil
  • iat - oluşturulma zamanı
{
  "iss": "https://api.myapp.com",
  "aud": "myapp-clients",
  "sub": "42",
  "exp": 1735689600,
  "iat": 1735686000
}

Özel Talepler

Kayıtlı kümenin yanı sıra uygulamanızın ihtiyaç duyduğu tüm özel talepleri ekleyebilirsiniz: roller, izinler, kiracı kimlikleri, e-posta ve daha fazlası.

Yükü küçük tutun: her talep her istekte taşınır.

{
  "sub": "42",
  "email": "alice@myapp.com",
  "role": "admin",
  "tenant_id": "acme",
  "permissions": ["orders:read", "orders:write"]
}

ASP.NET Core'da Talepler

.NET'te talepler, System.Security.Claims.Claim türüyle modellenir. Her talep, bir tür / değer çiftidir.

Bir JWT doğrulandığında ASP.NET Core, yük bölümündeki her girdiyi kullanıcının ClaimsPrincipal nesnesi üzerinde bir Claim nesnesine dönüştürür.

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 ve ClaimsIdentity

Kimliği doğrulanmış bir kullanıcı, bir veya daha fazla ClaimsIdentity nesnesini saran ve her biri bir talep kümesi içeren ClaimsPrincipal ile temsil edilir.

Bir denetleyicide bu nesneye User aracılığıyla erişirsiniz.

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

Talep Türü Eşlemesi

Varsayılan olarak JWT işleyicisi, kısa JWT anahtarlarını uzun URI tarzı talep türlerine eşler (örneğin sub, ClaimTypes.NameIdentifier olur).

Özgün kısa adları korumak için başlangıçta gelen eşlemeyi bir kez devre dışı bırakın.

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

Sadece Oturum Çerezi Neden Yetmez?

JWT'ler kendi içinde bütündür: sunucu, veritabanı sorgusuna veya sunucu tarafında bir oturum deposuna ihtiyaç duymadan yalnızca imzalama anahtarını kullanarak bunları doğrulayabilir.

Bu özellik, herhangi bir düğümün aynı token'ı doğrulayabildiği yatay olarak ölçeklendirilmiş API'ler ve mikro hizmetler için onları ideal hâle getirir.

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

Ödünleşim: İptal Etme

Bir JWT kendi içinde bütün olduğundan ve süresi dolana kadar güvenilir kabul edildiğinden, exp zamanından önce bir JWT'yi iptal etmek kolay değildir.

Yaygın çözüm, access token'ları kısa süreli tutmak ve bunları refresh token'larla birlikte kullanmaktır (bu konu kursun ilerleyen bölümünde ele alınacaktır).

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

Hızlı Kontrol

JWT yapısını ne kadar anladığınızı sınayın.

Özet

Bir JWT'nin yapısını ve ASP.NET Core'da taleplerin nasıl çalıştığını öğrendiniz:

  • Bir JWT, her biri Base64Url ile kodlanmış header.payload.signature bölümlerinden oluşur.
  • Yük bölümü, kodlanmış ancak şifrelenmemiş kayıtlı ve özel talepleri içerir.
  • İmza, bir gizli anahtar veya anahtar çifti kullanarak bütünlüğü garanti eder.
  • .NET, talepleri User aracılığıyla okuyabileceğiniz bir ClaimsPrincipal nesnesine dönüştürür.

Sırada, bu token'ları doğrulamak için ASP.NET Core'u yapılandıracaksınız.

Sıkça Sorulan Sorular

“JWT Yapısı ve Talepleri” dersi ücretsiz mi?

Evet — “JWT Yapısı ve Talepleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“JWT Yapısı ve Talepleri” dersinde ne öğreneceğim?

Üst bilgiyi, yükü ve imzayı anlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“JWT Yapısı ve Talepleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JWT Yapısı ve Talepleri
  2. JWT Bearer Kimlik Doğrulamasını Yapılandırma
  3. Belirteç Verme
  4. Yenileme Belirteçleri ve Süre Dolumu
← C# Academy Sayfasına Dön