İçeriğe geç

(B) Güvenlik

Keycloak SSO Kurulumu: Merkezi Kimlik Doğrulama ve OAuth2

5 dk okuma

Keycloak, modern uygulamalar için merkezi kimlik doğrulama altyapısı sunan açık kaynaklı bir çözüm. OAuth2 ve OpenID Connect protokollerini temel alarak tek oturum açma deneyimi sağlıyor. Kurumsal ortamlarda sıkça tercih ediliyor çünkü kullanıcı yönetimi, rol tabanlı erişim kontrolü ve çoklu kimlik sağlayıcı entegrasyonu gibi özellikleri tek bir platformda birleştiriyor.

Temel Kavramlar

Keycloak mimarisinde birkaç kritik yapı taşı var. Realm, izole edilmiş güvenlik alanı olarak görev yapıyor; her realm kendi kullanıcı grubu, istemcileri ve yapılandırmasıyla bağımsız çalışıyor. Yeni bir kurulumda "master" realm varsayılan olarak geliyor ve yönetici hesapları bu realm altında tutuluyor.

Client, Keycloak'tan kimlik doğrulama talep eden uygulama veya servis. Her client için benzersiz bir istemci kimliği ve yönlendirme URI'si tanımlanıyor. İstemci tipi olarak "confidential" veya "public" seçilebiliyor; public tipi SPA uygulamaları için, confidential ise sunucu taraflı uygulamalar için uygun.

User, sisteme giriş yapan son kullanıcıları temsil ediyor. Kullanıcı öznitelikleri, gruplar ve roller aracılığıyla yönetiliyor. Role, belirli işlemlere erişim yetkisi tanımlayan soyut bir kavram; Group ise kullanıcıları organizasyonel yapıya göre gruplandıran bir mekanizma.

Kurulum Seçenekleri

Keycloak'u çalıştırmanın birden fazla yolu var. En yaygın kullanılan yöntem Docker container üzerinden kurulum. Tek komutla ayağa kaldırmak mümkün:

docker run -p 127.0.0.1:8080:8080 \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:26.6.3 start-dev

Bu komut geliştirme ortamı için uygun. 26 sürümünden itibaren admin hesabı KC_BOOTSTRAP_ADMIN_USERNAME ve KC_BOOTSTRAP_ADMIN_PASSWORD değişkenleriyle açılışta oluşturuluyor; eski KEYCLOAK_ADMIN değişkenleri bu sürümde kaldırıldı. Bootstrap değişkenleri yalnızca ilk açılışta, veritabanında admin kullanıcısı yokken işliyor. Production kullanımda veritabanı bağlantısı ve TLS yapılandırması şart. PostgreSQL ile çalıştırmak için ek ortam değişkenleri gerekiyor; KC_DB=postgres ve veritabanı bağlantı parametreleri set edilmeli.

Kubernetes ortamında dağıtım için Helm chart kullanılabiliyor. Resmi Keycloak Operator, Kubernetes üzerinde realm ve kullanıcı yönetimini otomatikleştiriyor. Ancak operatör kurulumu biraz karmaşık; öncelikle Custom Resource Definition'ların tanımlanması gerekiyor.

İstemci Yapılandırması

Admin console üzerinden yeni bir istemci oluşturmak için önce realm seçilmeli, ardından "Clients" menüsünden "Create" butonuna tıklanmalı. İstemci kimliği girildikten sonra istemci tipi seçilmeli. OpenID Connect için "openid-connect" protokolü kullanılıyor.

İstemci ayarlarında dikkat edilmesi gereken birkaç nokta var. Valid Redirect URIs, güvenlik açısından kritik; yalnızca uygulamanın çalıştığı adresler girilmeli, aksi halde açık yönlendirme saldırılarına kapı açılır. Web Origins, CORS yapılandırması için gerekli; frontend uygulamasının kaynak adresi buraya eklenmeli.

Access token süresi varsayılan olarak 5 dakika. Bu değer "Tokens" sekmesinden ayarlanabiliyor. Session süresi de benzer şekilde yapılandırılıyor. Uzun süreli oturumlar için "Remember Me" özelliği etkinleştirilebilir; bu durumda oturum süresi uzatılıyor.

Spring Boot Entegrasyonu

Java tabanlı uygulamalarda Spring Security ile Keycloak entegrasyonu yaygın kullanılıyor. Maven dependencies olarak spring-boot-starter-oauth2-client ve spring-boot-starter-security eklenmeli. application.properties dosyasında istemci yapılandırması yapılıyor.

spring.security.oauth2.client.registration.keycloak.client-id=myapp
spring.security.oauth2.client.registration.keycloak.client-secret=secret
spring.security.oauth2.client.registration.keycloak.scope=openid,profile,email
spring.security.oauth2.client.provider.keycloak.issuer-uri=http://localhost:8080/realms/myrealm
spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username

Bu yapılandırma ile uygulama otomatik olarak Keycloak login sayfasına yönlendiriliyor. Başarılı kimlik doğrulama sonrası token'lar Spring Security tarafından yönetiliyor. Method seviyesinde yetkilendirme için @RolesAllowed anotasyonu kullanılabiliyor.

Kullanıcı Federasyonu

Active Directory veya LDAP ile entegrasyon, kurumsal ortamlarda sıkça ihtiyaç duyulan bir özellik. Keycloak'ta "User Federation" sekmesinden LDAP bağlantısı yapılandırılabiliyor. Bağlantı URL'si, temel DN, bind DN ve bind credentials girilmeli.

Kerberos entegrasyonu da mümkün; bu sayede Windows domain kullanıcıları oturum açabiliyor. Ancak Kerberos kurulumu karmaşık ve hata ayıklaması zor olabiliyor. Öncelikle temel LDAP senaryosunun çalıştığından emin olunmalı.

Güvenlik Önlemleri

Production ortamında mutlaka HTTPS kullanılmalı. Keycloak, varsayılan olarak HTTP üzerinden çalışıyor; reverse proxy arkasına alınarak TLS sonlandırması yapılmalı. Nginx veya HAProxy bu amaçla kullanılabiliyor.

Admin console erişimi IP bazlı kısıtlanmalı. Network seviyesinde firewall kuralları ile yalnızca güvenilir IP'lerden 8080 portuna erişime izin verilmeli. Ayrıca admin şifresi güçlü bir parola ile değiştirilmeli; varsayılan "admin/admin" kombinasyonu kesinlikle üretimde kullanılmamalı.

Token imzalama için RSA anahtar çifti kullanılıyor. Keycloak otomatik olarak anahtar üretiyor ancak uzun vadede anahtar yönetimi için harici keystore yapılandırması öneriliyor. Düzenli anahtar rotasyonu güvenlik açısından önemli.

Keycloak, kimlik doğrulama altyapısını tek noktadan yönetmeyi sağlıyor. Çok sayıda uygulamanın olduğu ortamlarda merkezi kullanıcı yönetimi büyük kolaylık sunuyor. Öğrenme eğrisi biraz dik olsa da dokümantasyon oldukça kapsamlı ve topluluk desteği güçlü.

Açık kaynak

GitHub projeleri

Tümünü gör
wireguard-server-panel

WireGuard VPN sunucu paneli - İstemci yönetimi, QR kodları ve trafik istatistikleri için kendi sunucunuzda barındırılan web kullanıcı arayüzü (fork, aktif olarak geliştirilmekte)

Go

Laravel-NDFirewall

Rota Kapsamlı Laravel WAF - RCE, SQLi, XSS ve SSRF algılama özelliklerine sahip hafif bir Web Uygulaması Güvenlik Duvarı

PHP

Trustsslroot

Tek komutla çalışan özel PKI oluşturucu - Kendi kendini imzalayan kök CA ve sertifikaları anında oluşturun

Go

node_exporter

Hafif sistem metrikleri aktarıcısı - Güvenli erişim kontrolüne sahip, Linux için durum bilgisi barındırmayan tek ikili dosyalı izleme hizmeti

Rust

ipReconary

IP keşif ve alt ağ analiz aracı - Hızlı ağ taraması ve IP istihbarat toplama

Rust

Cloudfiltred

Cloudflare IP beyaz liste güvenlik duvarı - 80/443 numaralı bağlantı noktalarını yalnızca Cloudflare IP’leriyle sınırlayarak kaynak sunucunuzu doğrudan saldırılara karşı koruyun

Rust

LoadAlertTracker

Hafif sistem yükü izleme arka plan programı - Eşik değerleri aşıldığında Telegram, Discord ve Mattermost üzerinden gerçek zamanlı uyarılar

Rust

ctCertWatch

Sertifika Şeffaflığı günlüğü izleyicisi - Kimlik avı alan adlarını, marka taklitçiliğini ve yetkisiz SSL sertifikalarını gerçek zamanlı olarak tespit eder

Rust

DDNS-FW

Dinamik DNS Güvenlik Duvarı - DDNS aracılığıyla değişen IP adreslerini takip edin ve güvenli erişim kontrolü için güvenlik duvarı kurallarını otomatik olarak güncelleyin

Rust