JSON Web Token'ın yapısını (header, payload, signature), nasıl çalıştığını ve üretimde güvenli kullanmanın kurallarını — kısa ömür, refresh token, imza doğrulama ve sık yapılan hatalar — anlatıyoruz.

JWT (JSON Web Token), taraflar arasında bilgiyi güvenli ve doğrulanabilir biçimde taşımanın yaygın bir yolu. Modern API'lerde kimlik doğrulamanın belkemiği olsa da, yanlış kullanıldığında ciddi güvenlik açıklarına yol açar.

JWT nedir?

JWT, imzalı bir metin parçasıdır. Sunucu kullanıcıyı doğruladıktan sonra bir token üretir; istemci sonraki isteklerde bunu Authorization: Bearer ... başlığıyla gönderir. Sunucu her istekte token'ın imzasını doğrulayarak kimliği teyit eder — oturumu sunucuda tutmaya gerek kalmaz.

Yapısı: header.payload.signature

  • Header: token türü ve imza algoritması (ör. HS256).
  • Payload: talepler (claims) — kullanıcı kimliği, roller, son kullanma zamanı (exp). Base64url ile kodlanır, şifrelenmez.
  • Signature: header + payload'ın gizli anahtarla imzalanmış hali; içeriğin değiştirilmediğini kanıtlar.

Güvenli kullanım kuralları

  1. Kısa ömür + refresh: erişim token'ını kısa tutun (ör. 15 dk); yenileme için ayrı, döndürülen (rotating) bir refresh token kullanın.
  2. Payload'a sır koymayın: içerik herkes tarafından okunabilir; parola, kişisel veri vb. eklemeyin.
  3. İmzayı her zaman doğrulayın ve alg: none gibi algoritma düşürme tuzaklarına izin vermeyin.
  4. Her yerde HTTPS kullanın; token ağda açıkça dolaşmasın.
  5. Saklama: tarayıcıda XSS riskini azaltmak için token'ı HttpOnly cookie'de tutmayı değerlendirin.
  6. İptal edilebilirlik: güvenlik damgası (security stamp) gibi bir mekanizmayla, gerektiğinde (parola değişimi) mevcut token'ları geçersiz kılın.

Özet

JWT güçlü ama "kur ve unut" bir araç değil. Kısa ömürlü erişim token'ı, döndürülen refresh token, doğru imza doğrulaması ve HTTPS ile birlikte kullanıldığında hem ölçeklenebilir hem güvenli bir kimlik doğrulama sağlar.