Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

JWT doğrulamasında kontrol edilen alanlar​


JWT doğrulamasında yalnızca token içindeki alanların okunması yeterli değildir. Önce beklenen token biçimi, izinli algoritma ve güvenilir anahtar seçilir; imza/MAC doğrulandıktan sonra iss, aud, exp ve gerekiyorsa nbf, sub gibi talepler kontrol edilir. Kimlik doğrulama kararı, imza ve zorunlu alanların tümü geçerli olmadan verilmemelidir.

JWT bölümleri ve güvenilirlik sırası​


Burada imzalı compact JWS biçimindeki JWT doğrulanır: header, payload ve signature olmak üzere üç bölüm vardır. Şifreli veya iç içe tokenlar farklı işleme profilleri gerektirir; her JWT’yi üç parçalı varsaymayın. Header ile payload Base64URL biçiminde okunabilir; ancak okunabilir olmaları doğru oldukları anlamına gelmez. Payload içindeki hiçbir değer imza doğrulanmadan güvenilir kabul edilmemelidir.

İlk kontrol, tokenın beklenen yapıda olup olmadığıdır. Ardından doğrulama kodu, kendi yapılandırmasında izin verilen algoritmalardan birini beklemeli ve imzayı sunucu tarafındaki doğru anahtarla doğrulamalıdır. Tokenın header bölümündeki alg değeri, sunucunun hangi algoritmaya izin vereceğini tek başına belirlememelidir. Aksi durumda algoritma karışıklığı veya yanlış anahtar seçimi riski doğar.

Hangi alanlar kontrol edilir?​


Aşağıdaki kontrollerin bazıları JWT standardının tanımladığı kayıtlı claim alanlarıdır; hangilerinin zorunlu olduğu ise uygulamanın güvenlik politikasına bağlıdır.

Bu kontrollerin yanında iat (oluşturulma zamanı) ve jti (token kimliği) uygulamaya göre kontrol edilebilir. iat gelecekte olamayacak şekilde sınırlandırılabilir; jti ise iptal listesi, tekrar oynatma önleme veya oturum takibi için kullanılabilir. typ gibi header alanları da beklenen token türünü sınırlamak için kullanılabilir, fakat her uygulamada zorunlu değildir.

Varsayımsal bir doğrulama örneği​


Bir API, yalnızca kendi kimlik sağlayıcısından gelen ve bu API için üretilmiş erişim tokenlarını kabul etsin. Aşağıdaki JSON yalnızca kurgu payload alanlarını gösterir; bir imza veya doğrulanabilir JWT içermez:

Kod:
{
  "iss": "https://login.example.com",
  "aud": "api.example.com",
  "sub": "user-482",
  "exp": 1900000000,
  "nbf": 1899996400,
  "scope": "orders:read"
}

AlanKontrolGeçersizseNot
algİzin verilen algoritmayla eşleşiyor mu?Token reddedilirHeader değeri allowlist yerine geçmez
issBeklenen yayıncıyla tam eşleşiyor mu?Token reddedilirGüvenilen kimlik sağlayıcıyı sınırlar
audBu API veya istemci hedef kitle olarak bulunuyor mu?Token reddedilirDizi veya tekil değer biçimi desteklenmelidir
expSüre dolmuş mu?Token reddedilirNumericDate: Unixepoch başlangıcından itibaren saniye; milisaniye değildir
nbfKullanım zamanı henüz gelmiş mi?Token reddedilirSaat farkı için sınırlı tolerans politikası gerekir
subKullanıcı veya özne kimliği mevcut ve beklenen biçimde mi?İşlem reddedilirYetki kararında bağlamına uygun kullanılmalıdır
kidİzin verilen anahtar kümesindeki anahtarı gösteriyor mu?İmza doğrulanamazsa reddedilirTek başına güven kanıtı değildir

Sunucu, imzayı beklediği anahtarla doğruladıktan sonra iss değerini tam olarak kendi yapılandırmasındaki yayıncıyla, aud değerini API kimliğiyle karşılaştırır. Tanımlı saat toleransı dışında şimdi exp değerinden küçük ve nbf değerinden büyük/eşitse token zaman bakımından kullanılabilir. Ancak bu, kullanıcının her işlemi yapabileceği anlamına gelmez; sipariş okuma isteği için scope veya benzeri uygulamaya özel yetki de ayrıca kontrol edilir. İmza veya bu zorunlu kontrollerden biri başarısızsa sunucu isteği yetkisiz kabul etmelidir.

Uygulanabilir doğrulama sırası​


  1. Tokenın beklenen taşıma biçiminde, bozulmamış ve beklenen JWT/JWS bölüm sayısında olduğunu kontrol edin.
  2. Header içindeki alg değerini izin verilen algoritmalarla karşılaştırın; izin verilmeyen veya beklenmeyen algoritmayı reddedin.
  3. Güvenilir yapılandırmadan veya güvenilir anahtar deposundan doğru anahtarı seçin. kid bulunuyorsa yalnızca izin verilen anahtar kümesinde arayın.
  4. İmzayı doğrulayın. Bu aşama geçmeden payload içindeki claim değerlerini kimlik veya yetki kanıtı olarak kullanmayın.
  5. Gerekli iss, aud, exp ve nbf kontrollerini uygulayın; saat farkı toleransını sınırlı ve açık bir politika olarak belirleyin.
  6. İsteğin bağlamına göre sub, kapsam, roller ve diğer uygulamaya özel claimleri kontrol edin. Başarılı kimlik doğrulamayı otomatik olarak yetki verilmesiyle karıştırmayın.
  7. Başarısız kontrolde tokenı kullanmadan uygun bir yetkisiz veya geçersiz kimlik doğrulama yanıtı verin; ayrıntılı imza ve anahtar bilgilerini istemciye döndürmeyin.

Sık yapılan hatalar​


Tokenı yalnızca decode ederek geçerli saymak, exp alanını kontrol etmemek ve aud değerini hiç doğrulamamak en yaygın hatalardandır. Doğrulamayı elle yazmak yerine bu kontrolleri açıkça yapılandırabildiğiniz, bakımı yapılan bir JWT kütüphanesi kullanın. Bir başka hata, headerdaki kid değerini doğrudan dosya adı, URL veya sorgu olarak kullanarak anahtar seçmektir; anahtar seçimi güvenilir bir allowlist veya yapılandırmayla sınırlandırılmalıdır. Ayrıca scope, rol veya kullanıcı kimliği imzalı olsa bile istenen işlemin yetkili olduğu ayrıca değerlendirilmelidir.

Sık sorulan sorular​


JWT içinde olmayan bir alanı zorunlu tutabilir miyim?​


Evet. tenant_id, scope veya uygulamanıza özgü başka bir claim için varlık, tür ve izin verilen değerleri kendi doğrulama politikanızda zorunlu kılabilirsiniz.

İmzalı JWT içine parola veya sır koyabilir miyim?​

İmza gizlilik sağlamaz; sıradan imzalı JWT’nin payload’u Base64URL çözülerek okunabilir. Parola, API anahtarı veya gereksiz kişisel veri taşımayın. Şifreleme ihtiyacı ayrı bir tasarım ve doğrulama profili gerektirir.

exp yoksa token otomatik olarak geçerli midir?​


Hayır. Uygulama süre sonunu zorunlu tutuyorsa exp eksikliği reddetme nedenidir. Süre politikası açıkça belirlenmemiş tokenlar sınırsız ömürlüymüş gibi kabul edilmemelidir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.