Blog Yazısı

← Tüm Blog Yazılarına Dön
Web Güvenliği & Backend • 12 Kasım 2026 • 7 dk okuma

Web Sitelerinde Giriş Yapmanın Anatomisi: JWT (JSON Web Token) Nedir ve Klasik Session'dan Farkı Nedir?

Modern web ve mobil uygulamalarda kullanıcı oturumu nasıl yönetilir? Sunucu belleğini yormayan durumsuz (stateless) JWT mimarisi, Header-Payload-Signature anatomisi ve klasik Session/Cookie ile güvenlik karşılaştırması.

Bir web sitesine kullanıcı adınızı ve şifrenizi girdiğinizde sistem sizi tanır. Ancak HTTP protokolünün en temel özelliği 'Stateless' (durumsuz) olmasıdır; yani sunucu bir saniye önce kimin istek attığını bir sonraki istekte hatırlamaz! Bu yüzden tarayıcınız sonraki her sayfaya tıklandığında sunucuya 'Ben hala aynı kişiyim, yetkim var' diyen bir kimlik belgesi sunmak zorundadır. İşte bu kimlik belgesini yönetmenin 20 yılı aşkın süredir kullanılan klasik yolu 'Session' (Oturum), modern mikroservis ve mobil dünyasının tercihi ise 'JWT' (JSON Web Token) mekanizmasıdır. Peki iki mimari arasındaki devasa fark nedir?

Klasik Session Tabanlı Kimlik Doğrulama Nasıl Çalışır?:
Klasik mimaride kullanıcı giriş yaptığında sunucu kendi belleğinde (RAM veya veritabanında) o kullanıcı için bir oturum açar ve içine kullanıcı bilgilerini yazar. Ardından tarayıcıya sadece rastgele bir metinden oluşan bir oturum anahtarı (Session ID) verir ve bunu bir Cookie içine yerleştirir. Kullanıcı her istek attığında bu ID sunucuya gider, sunucu kendi veritabanından bakar: 'Bu ID kime aitti? Evet, Baver\'e aitti.' Ancak bu yapının büyük bir sorunu vardır: Sitenize 100 bin kullanıcı aynı anda girdiğinde sunucunuzun belleği şişer. Üstelik birden fazla sunucunuz (Load Balancer arkasında) varsa, bir sunucunun tanıdığı oturumu diğer sunucu tanımaz; oturumları paylaşmak için araya Redis gibi merkezi bir oturum sunucusu koymanız gerekir.

JWT Nedir ve Nasıl Çalışır? (Durumsuz - Stateless Devrimi):
JWT; kullanıcı bilgilerinin kriptografik olarak imzalanmış, kendi kendine yeten (self-contained) kompakt bir JSON nesnesi halinde istemciye teslim edilmesidir. Aradaki en kritik fark şudur: Sunucu kendi hafızasında hiçbir şey tutmaz! Kullanıcı giriş yaptığında sunucu bilgileri paketler, kendi gizli anahtarıyla imzalar ve tarayıcıya/mobil uygulamaya verir. Kullanıcı sonraki isteklerinde bu token\'ı sunar. Sunucu veritabanına bakmaz; sadece 'Bu token benim gizli anahtarımla mı imzalanmış?' diye kriptografik imzasını kontrol eder. İmza doğruysa kullanıcıyı anında onaylar. Milyonlarca kullanıcı gelse bile sunucu belleğinde 1 bayt bile yer kaplamaz!

JWT'nin Anatomisi: Noktalarla Ayrılan Üç Parça:
Bir JWT token\'ına baktığınızda noktayla (.) ayrılmış üç karmaşık metin bloku görürsünüz (örneğin: xxxxx.yyyyy.zzzzz):
1. Header (Başlık): Token\'ın türünü (JWT) ve kullanılan şifreleme algoritmasını (örneğin HS256 veya RS256) belirtir.
2. Payload (Gövde): Kullanıcıya ait taşınan verilerdir (User ID, Rol, Son Kullanma Tarihi - exp). DİKKAT: Payload şifrelenmiş değil, sadece Base64 ile kodlanmıştır; yani herkes içini okuyabilir! Bu yüzden JWT içine asla kredi kartı veya açık şifre konulmaz.
3. Signature (İmza): Header ve Payload\'ın sunucudaki çok gizli bir anahtar (Secret Key) ile şifrelenmiş özetidir. Saldırgan Payload\'daki User ID\'yi değiştirirse imza geçersiz kalır ve sunucu isteği reddeder.

Güvenlik: Token Nerede Saklanmalı? (LocalStorage vs HttpOnly Cookie):
JWT kullanan geliştiricilerin yaptığı en ölümcül hata token\'ı tarayıcının localStorage alanına kaydetmektir. Çünkü sayfada çalışacak en ufak bir XSS (Cross-Site Scripting) zararlı kodu localStorage.getItem('token') diyerek kullanıcının token\'ını saniyeler içinde çalar! Token\'ları saklamanın en güvenli yolu; JavaScript tarafından asla okunamayan HttpOnly, Secure ve SameSite bayraklarına sahip Cookie\'lerdir.

Sonuç: Hangisini Seçmelisiniz?:
Eğer tek bir monolitik web sitesi (örneğin klasik bir e-ticaret veya blog) yönetiyorsanız, oturumu anında iptal edebilme gücünden dolayı klasik Session mimarisi hala son derece sağlam ve güvenlidir. Ancak; mobil uygulamalara API sunuyorsanız, mikroservis mimarisine sahipseniz veya birden fazla bağımsız sunucunuz varsa, sunucuyu yormayan ve her servisin tek başına doğrulayabildiği JWT tartışmasız modern standarttır.

← Diğer Yazılar Fikirlerini Paylaş →