JWT Nedir? Tanımı, Nasıl Çalışır ve Kullanım Alanları
JWT, JSON formatında kodlanmış ve dijital olarak imzalanmış bir kimlik doğrulama tokenidir. Kullanıcı bilgilerini güvenli bir şekilde taşıyarak sunucu ve istemci arasında iletişim sağlar. Mobil uygulamalar, API'ler ve modern web hizmetlerinde kimlik doğrulama için tercih edilir.
JWT (JSON Web Token), kullanıcı kimliğini ve izinlerini içeren, dijital olarak imzalanmış bir token standardıdır. Web uygulamaları, mobil uygulamalar ve API'ler arasında güvenli veri iletişimi sağlamak için kullanılır. Sunucunun her istekte kullanıcı bilgilerini veritabanında sorgulama ihtiyacını ortadan kaldırarak sistem performansını artırır.
JWT Nasıl Çalışır?
JWT üç noktalı bir yapıya sahiptir: header (başlık), payload (yük) ve signature (imza). İlk olarak kullanıcı, kullanıcı adı ve şifre ile sunucuya giriş yapar. Sunucu, kullanıcı bilgilerini doğruladıktan sonra bir JWT token üretir ve istemciye gönderir. İstemci bu tokeni saklayarak, daha sonraki her istekte HTTP Authorization başlığında sunucuya iletir. Sunucu, tokeni alır, imzasını doğrular ve içindeki bilgileri kontrol ederek istemi işleme alır.
JWT'nin Üç Bileşeni
- Header: Token türünü (JWT) ve kullanılan şifreleme algoritmasını (HS256, RS256 gibi) belirtir.
- Payload: Kullanıcı kimliği, yetkileri, e-posta, çıkış tarihi gibi talep (claim) olarak adlandırılan verileri içerir.
- Signature: Header ve payload'ın gizli bir anahtar kullanılarak imzalanmasıyla oluşturulur. Token'ın değiştirilmediğini doğrular.
Bu üç bileşen nokta ile ayrılarak Base64 formatında kodlanır. Örneğin: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1NjMwNDkifQ.signature
JWT'nin Avantajları
- Durum Bilgisi Olmayan (Stateless): Sunucu, her istek için session veritabanı sorgulaması yapmak zorunda değildir.
- Ölçeklenebilirlik: Birden fazla sunucu arasında kolayca paylaşılabilir, load balancing'i basitleştirir.
- Güvenli İletişim: Dijital imza sayesinde token değiştirilmesini tespit eder.
- Platform Bağımsız: JSON formatı tüm programlama dilleri ve platformlarda desteklenir.
- Bant Genişliği Verimliliği: Compact yapı, özellikle mobil uygulamalarda veri trafiğini azaltır.
- CORS Uyumlu: Cross-Origin Resource Sharing (CORS) ile sorunsuz çalışır.
JWT'nin Dezavantajları
- Token İptal Zorluğu: Token süresi doluncaya kadar geçerli kalır; oturum kapatılsa bile kullanılabilir.
- Token Boyutu: Session ID'ye kıyasla daha büyük olduğundan bant genişliği tüketimi artar.
- Gizli Anahtar Yönetimi: Anahtar sızması, tüm tokenları tehlikeye sokar.
- Talepte (Claim) Değişiklik İmkansızlığı: Token üretildikten sonra içeriği değiştirilmez; yeni token gerekir.
- Karmaşık Yetkilendirme: Detaylı izin kontrolleri için ek mekanizmalar gerekebilir.
JWT Nerede Kullanılır?
JWT, modern web mimarisinin birçok alanında yaygın olarak kullanılmaktadır:
- REST API'ler: İstemci-sunucu kimlik doğrulaması ve yetkilendirmesi.
- Mobil Uygulamalar: Token taşıması geleneksel session yönetiminden daha hafif.
- Microservis Mimarisi: Servisler arasında güvenli iletişim sağlar.
- Tek Oturum Açma (SSO): Birden fazla uygulamada kimlik doğrulama.
- OAuth 2.0 / OpenID Connect: Üçüncü taraf yetkilendirme protokolleriyle entegrasyonda.
- E-posta Doğrulama: Zaman sınırı olan doğrulama bağlantılarında.
- Şifre Sıfırlama: Güvenli token ile geçici erişim sağlanır.
JWT Türleri ve Algoritmaları
| Algoritma | Tip | Açıklama | Kullanım Alanı |
|---|---|---|---|
| HS256 (HMAC SHA-256) | Simetrik | Aynı gizli anahtar ile imzalama ve doğrulama | İç sunucular arası iletişim |
| RS256 (RSA SHA-256) | Asimetrik | Özel anahtar ile imzalama, herkese açık anahtar ile doğrulama | Açık API'ler, SSO sistemleri |
| ES256 (ECDSA) | Asimetrik | Eliptik eğri kripto, RS256'dan daha hızlı ve kompakt | Yüksek performans gereken sistemler |
| PS256 (RSA PSS) | Asimetrik | RSA'nın geliştirilmiş versiyonu | Yüksek güvenlik gereken uygulamalar |
JWT Güvenliği ve Best Practice'ler
- HTTPS Kullanın: Token'lar her zaman şifreli bağlantı üzerinde iletilmeli.
- Kısa Ömürlü Token: Token süresini 15-30 dakika gibi kısa tutun, yenileme token'ı (refresh token) ile yenileyin.
- Gizli Anahtarı Koru: Gizli anahtarı ortam değişkenlerinde saklayın, kod içine gömmeyin.
- İmzayı Her Zaman Doğrulayın: Token'ı aldıktan sonra imzasını sunucu tarafında doğrulamayı ihmal etmeyin.
- Token Sızması Planı: Token sızması halinde hızla geçerli anahtarı değiştirebilecek mekanizmalar hazırlayın.
- Hassas Verileri Saklı Tutun: Şifre, kredi kartı gibi hassas bilgileri payload'a koymayın.
- Blacklist Mekanizması: Oturum kapatmanız gerekiyorsa, iptal edilmiş token'ları redisleme (caching) ile takip edin.
"JWT, session tabanlı kimlik doğrulama için modern, ölçeklenebilir bir alternatiftir. Ancak güvenlik önlemleri alınmadığında ciddi risklere yol açabilir." — Web Güvenliği Uzmanları
JWT ve Session Tabanlı Kimlik Doğrulamanın Karşılaştırması
| Özellik | JWT | Session Tabanlı |
|---|---|---|
| Durum Bilgisi | Stateless (durum bilgisi yok) | Stateful (durum bilgisi gerekli) |
| Sunucu Yükü | Daha düşük | Daha yüksek |
| Ölçeklenebilirlik | Çok iyi | Sınırlı (session replikasyonu gerekli) |
| Token İptal | Zorlu | Anlık |
| Cross-Domain | Desteklenir | Cookie sınırlamalarına tabi |
| Mobil Uyumluluğu | Mükemmel | Sorunlu |