KeycloakProvisioning, API açılışta Keycloak’ı (realm, client, rol, kullanıcı, protocol mapper,
identity provider) appsettings config’inden otomatik kurar. Ayrı bir Worker Service’e gerek
yoktur; bir IHostedService olarak ana uygulamada çalışır.
Hosted service davranışı
KeycloakProvisioningHostedService
(src/BuildingBlocks/BuildingBlocks.Keycloak/Provisioning/Application/Services/) StartAsync’te:
Enabled: falseise hiçbir şey yapmaz.- Keycloak’ın hazır olmasını bekler (
WaitForKeycloakReadyAsync) —masterrealm’ın OIDC discovery endpoint’ini max 120 sn, 5 sn aralıkla poll’lar. - Scoped
IProvisioningOrchestratorileProvisionAllAsyncçağırır. - Hata olursa loglar ama uygulamayı çökertmez.
Config: KeycloakProvisioning
| Alan | Anlam |
|---|---|
Enabled | Provisioning açık mı (prod’da genelde false). |
RunOnce | true: açılışta bir kez çalışır. false (periyodik) bu sürümde desteklenmez — yine bir kez çalışır, uyarı loglanır. |
Admin | Keycloak Admin REST API erişimi (admin-cli, master realm). |
Realms[] | Kurulacak realm tanımları. |
Realm seed modeli
Her realmClients, Users, IdentityProviders içerir:
IdentityProviders (Google) tanımlıdır ve client rolü Citizen’dır.
Seed kullanıcı
Id’leri sabittir (örn. a0000001-...) ve DB’deki dev seed ile birebir eşleşir:
Keycloak user ID = local UserIdentityProvider.provider_user_id. Böylece “Keycloak’ta giriş yapan
kullanıcı = DB’deki kullanıcı” bağı kurulur.İdempotent davranış
Orchestrator her öğeyi upsert eder: varsa günceller, yoksa oluşturur. Bu yüzden her API açılışında güvenle çalışır — mevcut realm/client’ı kırmaz, yalnızca eksikleri tamamlar ve drift’i config’e geri çeker.Yardımcı script’ler
Provisioning’e ek olarakscripts/ altında elle çalıştırılabilen PowerShell yardımcıları vardır:
scripts/create-keycloak-dev-users.ps1— DB dev seed’iyle eşleşensubUUID’lerine sahip Keycloak kullanıcılarını oluşturur (Keycloak user ID =UserIdentityProvider.provider_user_id).scripts/set-keycloak-test-user-attributes.ps1— bir test kullanıcısınapermissionsvetenant_idattribute’larını set eder.
admin-cli ile master realm’dan token alıp bağlanır.
İlgili
Client Yapılandırması
Aynı yapının manuel kurulumu.
Realm Yapısı
Provision edilen roller ve mapper’lar.
Ortamlar
Hangi ortamda provisioning açık.
Sorun Giderme
Provisioning loglarını okuma.