Hoşgeldin Misafir

Yasar7880

İzmir
1 Mar 2024
840 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Bir API geliştirmeye başladığında ilk başlarda her şey oldukça basit görünür.
Endpoint'ler çalışır, veriler gelir gider, testler başarılıdır.
Sonra bir gün aklına şu soru gelir:

"Bu API'ye herkes erişebiliyorsa bunun güvenliği nasıl sağlanacak?"

İşte tam bu noktada kimlik doğrulama (Authentication) konusu devreye girer.
Spring Boot dünyasında bunun için farklı yöntemler bulunuyor. Session tabanlı yapılar hâlâ kullanılıyor olsa da özellikle REST API geliştiren ekiplerin büyük bölümü artık JWT tabanlı sistemleri tercih ediyor.

Peki JWT nedir, neden bu kadar yaygın kullanılır ve Spring Security ile nasıl çalışır?
Gelin adım adım inceleyelim.

1*lKCfvUomrb7Q0fBVDfr2OQ.png



JWT Nedir?

JWT'nin açılımı JSON Web Token'dır.
Basitçe söylemek gerekirse kullanıcı giriş yaptıktan sonra sistem tarafından üretilen ve kullanıcının kimliğini doğrulayan dijital bir anahtardır.
Kullanıcı her istekte kullanıcı adı ve şifresini tekrar göndermek yerine bu token'ı gönderir.
Sunucu da token'ı doğrular ve isteğe izin verir.
Bu sayede sürekli oturum kontrolü yapmak gerekmez.



Geleneksel Session Yapısı ile JWT Arasındaki Fark

JWT'nin neden popüler olduğunu anlamak için önce klasik yönteme bakalım.

Özellik
Session
JWT
Sunucuda oturum tutulur
Evet
Hayır
Ölçeklenebilirlik
Orta
Yüksek
Mikroservis uyumu
Düşük
Yüksek
REST API kullanımı
Orta
Çok iyi
Sunucu yükü
Daha fazla
Daha az
Özellikle bulut tabanlı sistemlerde JWT önemli avantajlar sağlar.


JWT Nasıl Çalışır?

Aslında süreç oldukça basittir.

  1. Kullanıcı giriş yapar.​
  2. Kullanıcı bilgileri doğrulanır.​
  3. Sunucu JWT üretir.​
  4. Token istemciye gönderilir.​
  5. İstemci sonraki tüm isteklerde token gönderir.​
  6. Sunucu token'ı doğrular.​
Sürekli kullanıcı adı ve şifre taşımaya gerek kalmaz.


JWT Yapısı

Bir JWT genellikle şu üç bölümden oluşur:

HEADER.PAYLOAD.SIGNATURE
Örnek bir token ilk bakışta oldukça karmaşık görünür.

eyJhbGciOiJIUzI1NiJ9...
Ama aslında içerisinde kullanıcıya ait bazı bilgiler ve güvenlik imzası bulunur.



Spring Security Neden Kullanılır?

JWT tek başına bir güvenlik framework'ü değildir.
Token üretir ve doğrular.
Fakat kullanıcıların hangi endpoint'lere erişeceğini kontrol etmek için Spring Security devreye girer.

Bu sayede:

  • Kimlik doğrulama yapılabilir​
  • Yetkilendirme sağlanabilir​
  • Endpoint bazlı erişim kontrolü yapılabilir​
  • Güvenlik katmanı merkezi şekilde yönetilebilir​

Gerekli Bağımlılıklar

Tipik bir projede aşağıdaki bağımlılıklar kullanılır.

Kütüphane
Görevi
Spring Security
Güvenlik katmanı
Spring Web
REST API
JJWT
JWT üretimi
Spring Data JPA
Veritabanı işlemleri
Bu yapı günümüzdeki birçok Spring Boot API projesinde standart hale gelmiş durumda.


Authentication Süreci Nasıl İşler?

Kullanıcı login isteği gönderir.

Örneğin:
JavaScript:
{ "username":"admin", "password":"123456" }
Sistem kullanıcıyı doğrular.
Bilgiler doğruysa token üretir.
Yanıt genellikle şu şekilde döner:
JavaScript:
{ "token":"eyJhbGciOiJIUzI1Ni..." }
Artık kullanıcı sisteme giriş yapmıştır.



Token İsteklerde Nasıl Gönderilir?

JWT genellikle HTTP Header üzerinden taşınır.

Authorization: Bearer TOKEN
Örnek:

Authorization: Bearer eyJhbGciOiJIUzI1Ni...
Spring Security bu token'ı okuyarak doğrulama işlemini gerçekleştirir.



JWT Kullanmanın Avantajları

JWT'nin bu kadar yaygınlaşmasının önemli sebepleri vardır.

Avantaj
Açıklama
Stateless yapıSunucuda oturum tutulmaz
PerformansDaha az kaynak tüketir
Mikroservis uyumuÇok başarılı
Mobil uygulama desteğiKolay entegrasyon
REST API uyumu
Yüksek
Bu nedenle modern API projelerinde sıklıkla tercih edilir.


Geliştiricilerin En Sık Yaptığı Hatalar

JWT kullanırken bazı hatalar oldukça yaygındır.

Token Süresini Çok Uzun Tutmak
Bazı projelerde token süreleri aylarca geçerli olacak şekilde ayarlanıyor.
Bu ciddi güvenlik riskleri oluşturabilir.


Şifreleri Düz Metin Saklamak
JWT kullanıyor olmak şifre güvenliğini ortadan kaldırmaz.

Şifreler mutlaka hashlenmelidir.
En yaygın yöntemlerden biri BCrypt kullanmaktır.

Secret Key'i Kod İçine Yazmak
Birçok geliştirici ilk projelerinde secret key değerini doğrudan kod içerisine yazar.

Bu yaklaşım üretim ortamlarında güvenlik açığı oluşturabilir
Secret değerleri environment variable veya güvenli yapılandırma dosyalarında tutulmalıdır.



JWT Ne Zaman Kullanılmalı?

Aşağıdaki senaryolarda JWT oldukça başarılı sonuç verir:

✅ REST API projeleri
✅ Mobil uygulamalar
✅ Mikroservis mimarileri
✅ Frontend ve backend'in ayrı çalıştığı yapılar
✅ Bulut tabanlı sistemler

Ancak tamamen sunucu taraflı çalışan klasik web uygulamalarında her zaman ilk tercih olmak zorunda değildir.
Sevgili THS Okurları
Spring Security ve JWT birlikte kullanıldığında modern API projeleri için oldukça güçlü bir kimlik doğrulama altyapısı sunar.
Özellikle REST mimarisine sahip uygulamalarda, kullanıcı oturumlarını sunucu tarafında saklama zorunluluğunu ortadan kaldırması büyük avantaj sağlar.

JWT öğrenmeye ilk başlayan geliştiriciler için konu karmaşık görünebilir. Ancak mantığını anladıktan sonra aslında süreç oldukça nettir: kullanıcı doğrulanır, token üretilir ve sonraki tüm işlemler bu token üzerinden yürütülür. Bugün geliştirilen birçok Spring Boot projesinde JWT artık bir seçenek olmaktan çıkmış durumda. Özellikle ölçeklenebilir ve güvenli API'ler geliştirmek isteyen ekipler için temel yapı taşlarından biri haline gelmiş durumda.

Sevgili THS okurları bu yazımızda programlamada çok önemli bir konu olan Spring Security ile JWT Authentication Sistemini ele aldık. Bir dahaki makalemizde görüşüne dek mavi ekransız bugsuz ve sorunsuz sistemlerde çalışmanız dileği ile hoşçakalın.




9jul8m7.jpeg