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.
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.
Özellikle bulut tabanlı sistemlerde JWT önemli avantajlar sağlar.
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.
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:
Bu yapı günümüzdeki birçok Spring Boot API projesinde standart hale gelmiş durumda.
Örneğin:
Sistem kullanıcıyı doğrular.
Bilgiler doğruysa token üretir.
Yanıt genellikle şu şekilde döner:
Artık kullanıcı sisteme giriş yapmıştır.
Authorization: Bearer TOKEN
Örnek:
Authorization: Bearer eyJhbGciOiJIUzI1Ni...
Spring Security bu token'ı okuyarak doğrulama işlemini gerçekleştirir.
Bu nedenle modern API projelerinde sıklıkla tercih edilir.
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.
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.
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.
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 |
JWT Nasıl Çalışır?
Aslında süreç oldukça basittir.- Kullanıcı giriş yapar.
- Kullanıcı bilgileri doğrulanır.
- Sunucu JWT üretir.
- Token istemciye gönderilir.
- İstemci sonraki tüm isteklerde token gönderir.
- Sunucu token'ı doğrular.
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 |
Authentication Süreci Nasıl İşler?
Kullanıcı login isteği gönderir.Örneğin:
JavaScript:
{ "username":"admin", "password":"123456" }
Bilgiler doğruysa token üretir.
Yanıt genellikle şu şekilde döner:
JavaScript:
{ "token":"eyJhbGciOiJIUzI1Ni..." }
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 |
| Performans | Daha az kaynak tüketir |
| Mikroservis uyumu | Çok başarılı |
| Mobil uygulama desteği | Kolay entegrasyon |
| REST API uyumu | Yüksek |
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: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.

