Keycloak vs Auth0: Keycloak Nedir ve Nasıl Kurulur?
Keycloak, Red Hat tarafından geliştirilen açık kaynaklı ve ücretsiz bir Identity and Access Management (Kimlik ve Erişim Yönetimi - IAM) çözümüdür. Uygulamalarınıza Merkezi Kimlik Doğrulama (SSO), OAuth 2.0 ve OpenID Connect (OIDC) özelliklerini kod yazmadan eklemenizi sağlar. Kendi sunucunuzda (self-hosted) çalışarak kullanıcı verilerinizin kontrolünü tamamen size bırakır.
Modern yazılım mimarilerinde (özellikle mikroservislerde), her uygulamanın kendi "Kayıt Ol" ve "Giriş Yap" ekranını sıfırdan yazması hem büyük bir zaman kaybı hem de ciddi bir güvenlik riskidir. Kimlik yönetimi artık sadece şifreleri veritabanına kaydetmekten çok daha fazlasıdır.
Bu detaylı rehberde; Keycloak ne işe yarar?, bulut tabanlı rakipleri olan Auth0 ve Okta'dan farkı nedir? ve modern Spring Boot 3.x uygulamalarıyla güvenli bir şekilde nasıl entegre edilir sorularının yanıtlarını adım adım inceleyeceğiz.
1. Keycloak Nedir ve Temel Özellikleri Nelerdir?
Keycloak, uygulamalarınıza ve API'lerinize asgari eforla güvenlik eklemenizi sağlayan merkezi bir kimlik sunucusudur. Her projenin ayrı bir kullanıcı veritabanı tutması yerine, tüm kimlik işlemleri Keycloak üzerinde merkezileştirilir.
Öne çıkan temel özellikleri şunlardır:
- Single Sign-On (SSO): Kullanıcılar sisteme sadece bir kez giriş yapar ve yetkisi olan diğer tüm bağımsız uygulamalara tekrar şifre girmeden erişebilir.
- Standart Protokoller: Sektör standardı olan OAuth 2.0, OpenID Connect (OIDC) ve SAML 2.0 protokollerini tam destekler.
- Sosyal Giriş (Social Login): Herhangi bir kod yazmadan Google, GitHub, Facebook ve Twitter ile giriş yapma özelliğini aktif edebilirsiniz.
- LDAP ve Active Directory: Kurumsal şirketlerdeki mevcut kullanıcı dizinlerine doğrudan bağlanabilir.
- Özelleştirilebilir Arayüz: Giriş yapma, kayıt olma ve şifre sıfırlama sayfalarının temasını (HTML/CSS) kendi markanıza göre değiştirebilirsiniz.
2. Mikroservislerde Neden Keycloak Kullanmalıyız?
10 farklı mikroservisten oluşan bir mimariniz olduğunu düşünün. Her servisin kendi JWT üretimini ve doğrulamasını yapması mimari bir kâbustur. Keycloak, güvenliği iş mantığından (business logic) tamamen ayırır.
- İstemci (Client - Web veya Mobil), giriş yapmak için Keycloak'ın sağladığı login sayfasına yönlendirilir.
- Giriş başarılı olduğunda Keycloak bir JWT (JSON Web Token) üretir.
- İstemci bu token'ı backend servislerinize gönderir.
- Her mikroservis, Keycloak'a tekrar ağ isteği (network request) atmadan, Keycloak'ın Public Key (Açık Anahtar) bilgisiyle token'ın imzasını yerel olarak saniyenin onda biri sürede doğrular.
Bu yapı hem inanılmaz performanslıdır hem de servislerin birbirine olan bağımlılığını (tight coupling) ortadan kaldırır.
3. Keycloak vs Auth0 vs Okta: Hangisini Seçmeli?
Doğru IAM çözümünü seçmek bütçenize, veri gizliliği gereksinimlerinize ve sunucu yönetim kapasitenize bağlıdır. İşte sektör liderlerinin karşılaştırması:
| Özellik | Keycloak | Auth0 | Okta |
|---|---|---|---|
| Lisans & Maliyet | %100 Ücretsiz / Açık Kaynak | Ücretli (Sınırlı ücretsiz paket var) | Çok Pahalı (Kurumsal Odaklı) |
| Barındırma (Hosting) | Self-Hosted (Kendi Sunucunuz) | Cloud SaaS (Bulut) | Cloud SaaS (Bulut) |
| Veri Gizliliği | Veriler sizin sunucunuzda kalır | Veriler Auth0 sunucularında tutulur | Veriler Okta sunucularında tutulur |
| Bakım Zorluğu | Yüksek (Güncellemeleri siz yaparsınız) | Sıfır (Vendor tarafından yönetilir) | Sıfır (Vendor tarafından yönetilir) |
4. Docker ile Keycloak Kurulum Adımları
Geliştirme ortamı için Keycloak'ı Docker ile ayağa kaldırmak en hızlı yöntemdir. Terminalinizde şu komutu çalıştırın:
docker run -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:24.0.0 start-dev
- Tarayıcınızdan
http://localhost:8080adresine gidin ve admin / admin bilgileriyle giriş yapın. - Realm Oluşturun: Sol üstteki açılır menüden "Create Realm" diyerek adını
myrealmyapın. - Client (İstemci) Oluşturun: Menüden "Clients" → "Create Client" adımlarını izleyin. Client ID değerini
spring-appyapın ve "Client authentication" seçeneğini AÇIK (ON) konuma getirin. - Kullanıcı Oluşturun: "Users" → "Add user" adımından bir kullanıcı ekleyip, "Credentials" sekmesinden şifresini belirleyin.
5. Spring Boot 3.x ile Keycloak Entegrasyonu (Kritik Güncelleme)
keycloak-spring-boot-starter kütüphanesi ve KeycloakWebSecurityConfigurerAdapter sınıfı tamamen kullanımdan kaldırılmıştır (deprecated). İnternetteki eski makalelerdeki bu kodlar artık çalışmaz. Artık standart Spring Security OAuth2 Resource Server yapısını kullanmalısınız.
Modern ve resmi olarak desteklenen entegrasyon yöntemi şu şekildedir:
Adım 1: Maven Bağımlılıkları (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
Adım 2: application.yml Ayarları
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://localhost:8080/realms/myrealm
Adım 3: SecurityFilterChain Konfigürasyonu
Eski adapter'ları extend etmek yerine modern fonksiyonel konfigürasyonu kullanmalısınız:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll() // Herkese açık uç noktalar
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() // Swagger'a izin ver
.anyRequest().authenticated() // Diğer tüm istekler token gerektirir
)
.oauth2ResourceServer(oauth2 -> oauth2
.jwt(Customizer.withDefaults())
);
return http.build();
}
}
Bu yapı sayesinde Spring Boot, başlattığınızda Keycloak'a bağlanıp açık anahtarları (public keys) otomatik olarak çekecek ve gelen token'ları milisaniyeler içinde kendi içinde doğrulayacaktır.
6. Sık Sorulan Sorular (SSS)
Keycloak ticari projelerde tamamen ücretsiz mi?
Evet. Keycloak %100 açık kaynaklıdır ve Apache 2.0 lisansı ile dağıtılır. Hiçbir lisans ücreti ödemeden üretim (production) ve kurumsal ortamlarınızda özgürce kullanabilirsiniz.
Keycloak ve Auth0 arasındaki en temel fark nedir?
Keycloak kendi sunucunuza (self-hosted) kurduğunuz bir yazılımdır; sunucu maliyeti ve bakım size aittir ama verileriniz güvendedir. Auth0 ise yönetilen bir bulut servisidir (SaaS); kurulumu çok kolaydır ancak sistem büyüdükçe çok ciddi ücretler ödemeniz gerekir.
KeycloakWebSecurityConfigurerAdapter neden hata veriyor?
Çünkü Spring Boot 3.x'in temelinde yatan Spring Security 6, eski nesil WebSecurityConfigurerAdapter yapısını tamamen kaldırdı. Keycloak ekibi de kendi özel Spring kütüphanelerinin fişini çekerek, geliştiricilerin standart OAuth2 kütüphanelerine yönelmesini tavsiye etmiştir.
Sonuç
Özellikle mikroservis mimarileri ve kurumsal ölçekli projeler söz konusu olduğunda Keycloak, ücretsiz olması ve sunduğu devasa esneklikle piyasadaki en güçlü IAM çözümlerinden biridir. Merkezi SSO (Single Sign-On), OAuth2 ve LDAP entegrasyonu sayesinde projelerinizi modern güvenlik standartlarına taşıyabilirsiniz.
Spring Boot entegrasyonlarında ise eski dokümanlardaki tuzaklara düşmemek için spring-boot-starter-oauth2-resource-server kullanmayı ve projenizi modern Spring Security 6 mimarisine uygun tasarlamayı unutmayın.
Kimlik doğrulama kavramlarını daha derinlemesine öğrenmek için şu yazılarımıza göz atabilirsiniz: