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.

5 dk okuma
JWT

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
Sıkça Sorulan Sorular
JWT ile session arasındaki fark nedir?+
JWT (JSON Web Token) durum bilgisi olmayan (stateless) bir yapıdır; sunucu token'ı verify eder ama saklamaz. Session ise sunucuda saklanır ve her istek için veritabanında sorgulanır. JWT ölçeklenebilir sistemler için daha uygunken, session basit uygulamalar için yeterli olabilir.
JWT'nin süresi dolunca ne olur?+
Token süresi (expiration time / exp claim) dolduğunda sunucu istemi reddeder. Kullanıcı yeniden giriş yapmalıdır veya refresh token kullanarak yeni bir JWT almalıdır. Refresh token mekanizması, uzun süreli erişim sağlarken kısa ömürlü access token'ı korur.
JWT'de şifreleme (encryption) var mı?+
JWT standart olarak şifrelenmez, yalnızca imzalanır (signed). Payload Base64 ile kodlanır ancak kolayca deşifre edilebilir. Hassas veriler içermemesi önerilir. JWE (JSON Web Encryption) kullanarak şifreleme ekleyebilirsiniz, ancak çoğu uygulama HTTPS + imzalı JWT ile yeterli güvenlik sağlar.

J harfindeki diğer terimler