JWT ile oturum yönetimi: sık yapılan hatalar
- #backend
- #auth
- #güvenlik
JWT (JSON Web Token), API’lerde oturum yönetiminin yaygın bir yolu — Işıksoft’ta da müşteri arayüzü ve panel için bunu kullanıyoruz. Kurması basit ama yanlış kurmak da bir o kadar kolay. En çok karşılaştığım hatalar:
1. Token’ı localStorage’a koymak
En sık yapılan ve en riskli tercih. localStorage’a yazılan token, sayfada
çalışan herhangi bir JavaScript tarafından okunabilir — yani bir XSS açığında
saldırgan token’ı doğrudan çalar. Bunun yerine token’ı HttpOnly cookie’de
tutuyorum; JavaScript erişemez, tarayıcı isteklere otomatik ekler.
Set-Cookie: token=...; HttpOnly; Secure; SameSite=Strict; Path=/
SameSite ve Secure bayrakları CSRF ve araya girme risklerini ciddi ölçüde azaltıyor.
2. Token’ın içine hassas veri koymak
JWT’nin payload’ı şifreli değil, yalnızca imzalı. Yani base64’ü çözen herkes içindekini okuyabilir. İçine parola, kişisel veri ya da gizli bir bilgi koymak olmaz — sadece kullanıcı kimliği ve roller gibi, görünmesinde sakınca olmayan asgari bilgiyi koyarım.
3. Süreyi sonsuz yapmak
Uzun ömürlü bir token, çalındığında uzun süre geçerli kalır. Çözüm ikili yapı:
- Kısa ömürlü access token (örn. 15 dakika) — asıl iş bununla yapılır.
- Uzun ömürlü refresh token — access token’ı yenilemek için, sunucuda takip edilebilir şekilde saklanır.
4. “Çıkış yap” gerçekten çıkış yapmıyor
JWT tasarımı gereği durumsuzdur (stateless); sunucu onu “iptal” edemez, süresi dolana kadar geçerli kalır. Gerçek bir çıkış / iptal istiyorsan, sunucu tarafında bir kara liste (blacklist) ya da refresh token’ı geçersiz kılan bir kayıt tutman gerekir. Aksi halde “çıkış yaptım” dediğin token dakikalarca daha çalışmaya devam eder.
JWT güçlü bir araç ama sihirli değil. Token’ı güvenli sakla, içine az şey koy, kısa tut — bu üçü çoğu sorunu baştan engelliyor.