Kimlik ve güvenlik
JWT: taşıyıcı token ve doğrulama
JWT imzalıdır, şifreli değildir. Neyin kontrol edilmesi gerektiğini bilmek her şeydir.
Kavramı anlayalım
JSON Web Token üç parçadan oluşur: header, payload ve imza; her biri Base64URL ile kodlanıp noktalarla birleştirilir. Payload’daki claim’ler (kullanıcı kimliği, rol, son geçerlilik zamanı) herkes tarafından okunabilir; imza yalnızca değiştirilmediklerini kanıtlar. Bu yüzden JWT içine parola veya kişisel hassas veri konmaz.
Sunucu token’ı kabul etmeden önce şunları doğrular: imza beklenen anahtar ve algoritmayla mı atılmış, issuer ve audience beklenen değerler mi, token’ın süresi (exp) dolmuş mu. Algoritmayı token’ın kendisinin belirlemesine izin vermek tarihsel olarak ciddi açıklara yol açtı; kabul edilen algoritma sunucu tarafında sabitlenir.
JWT’nin zayıf yanı iptaldir: imzalı bir token, süresi dolana kadar geçerlidir. Bu yüzden ömürleri kısa tutulur ve gerektiğinde ek kontroller yapılır. Bu projede her JWT doğrulamasında kullanıcının güvenlik damgası (security stamp) da kontrol edilir; çıkış yapınca damga değişir ve eski token’lar geçersiz olur.
Eksik bir doğrulama adımı, herkesin kendi token’ını üretebilmesi demektir.
Token’ı yalnız Base64 çözüp claim’lere bakmak ve imzayı doğrulamamak.
Bir mektubun şehirdeki yolculuğu
İsteği bir mektup, sunucuyu bir şehir gibi düşün. Senaryo seç, oynat ve mektubun hangi kapıdan geçip nerede durdurulduğunu izle.
Giriş formunu gönderdin. Parolan şifreli tünelin içinde gidiyor, adres çubuğunda görünmüyor.
Aynı konu. Üç farklı derinlik.
eyJhbGciOiJIUzI1NiJ9 . eyJzdWIiOiI3YzFlIiwicm9sZSI6IkFkbWluIiwiZXhwIjoxNzkxMzgwMDAwfQ . 4kd…
header payload (herkes okuyabilir) imzaPayload şifreli değildir; yalnız imzayla korunur.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Bir saldırgan payload’daki rolü ‘User’dan ‘Admin’e değiştirip token’ı geri kodluyor ve gönderiyor. Doğru yapılandırılmış bir API ne yapar?
Çözümü ve açıklamasını göster
İmza artık payload ile eşleşmez → doğrulama başarısız → 401.
Saldırgan anahtarı bilmeden geçerli imza üretemez.
(alg: "none" denemesi de ValidAlgorithms ile reddedilir.)JWT’nin güvenliği payload’ın gizliliğinden değil, imzanın doğrulanmasından gelir.