Neden Keycloak
- OIDC + SSO standartlarına tam uyum, JWKS ile RS256 imza doğrulama.
- Identity Federation — Google gibi dış IdP’leri delege eder.
- MFA, parola politikası, brute-force koruma hazır gelir.
- Self-hosted — kullanıcı verisi dışarı çıkmaz (on-prem müşteri ortamı için kritik).
- Çoklu realm — vatandaş ve personeli aynı sunucuda izole tutar.
Çift realm mantığı
API iki ayrı realm’dan token kabul eder; her birinin ayrı kullanıcı havuzu, client’ı ve rolleri vardır.| Taraf | Realm (dev) | Client | Token ömrü | Rol(ler) |
|---|---|---|---|---|
| Vatandaş (Website SPA) | diyanet-vatandas-dev-realm | diyanet-website | 2 saat (7200 sn) | Citizen |
| Personel (Admin SPA) | diyanet-yonetim-dev-realm | diyanet-admin | 5 dakika (300 sn) | SuperAdmin, Admin, Staff, ReadOnly |
Personel token’ı bilinçli olarak çok kısadır (5 dk). Yönetim paneli yüksek-yetkili olduğundan
çalınan bir token’ın penceresi minimumda tutulur; refresh token rotation (30 dk lifespan) ile
sürekli oturum sağlanır. Vatandaş tarafı kullanılabilirlik için daha uzun tutulur (2 saat).
Client’lar
Her iki client da public (PKCE) client’tır — SPA’lar tarayıcıda çalıştığı için secret saklayamaz:DirectAccessGrantsEnabled ve ServiceAccountsEnabled kapalıdır; yalnızca Authorization Code
- PKCE akışı açıktır.
Provisioning: dev vs stage/prod
- Dev: Keycloak bir container’dır (
localhost:8080); API açılıştaKeycloakProvisioningile realm/client/rol/kullanıcı/mapper’ı otomatik kurar (RunOnce: true). - Stage/Prod: Keycloak genelde müşterinin mevcut harici instance’ıdır. Provisioning
Enabled: falseyapılıp realm manuel kurulabilir veya tek seferlik provisioning ile.
Token edinim akışı (Auth Code + PKCE)
Bu bölümde
Realm Yapısı
İki realm, roller, protocol mapper’lar, token içeriği.
Client Yapılandırması
Public client ayarları ve manuel kurulum rehberi.
Otomatik Provisioning
KeycloakProvisioning config’i ve hosted service.
Ortamlar
Dev / stage / prod farkları, BaseUrl vs PublicBaseUrl.
Sorun Giderme
Sık hatalar ve çözümleri.
Authentication
API tarafında token doğrulama.