BuildingBlocks.Keycloak API’yi iki ayrı Keycloak realm’ından token kabul edecek şekilde yapılandırır: Vatandaş (citizen SPA) ve Personel (yönetim paneli). Tek AddKeycloak(...) çağrısı iki JwtBearer şeması kurar, claims transformation zincirini kaydeder ve ICurrentUserService ile aktif kullanıcı bağlamını sunar.
Geniş kapsamlı Keycloak konuları (realm yapısı, provisioning, ortamlar, sorun giderme) Keycloak grubundadır. Bu sayfa paketin kod tarafına odaklanır.
Yapılandırma — KeycloakOptions
appsettings.json’daki Keycloak bölümüyle bind edilir. İki alt bölüm vardır: Vatandas ve Personel, her ikisi de KeycloakSchemeOptions tipinde.
KeycloakSchemeOptions
KeycloakSchemeNames
[Authorize] attribute’larında kullanılan sabit şema adları:
Default şema
Personel’dir (AddAuthentication(KeycloakSchemeNames.Personel)). Şema belirtmeyen [Authorize] attribute’ları Personel realm’ını kullanır; vatandaş endpoint’leri açıkça KeycloakSchemeNames.Vatandas belirtmelidir.Arayüzler
ICurrentUserService HTTP context tabanlı CurrentUserService ile implement edilir; UserId önce user_id, yoksa Keycloak sub claim’ini okur. IUserContextProvider varsayılan olarak no-op NullUserContextProvider’dir — Application katmanı kendi implementasyonunu services.AddScoped<IUserContextProvider, UserContextProvider>() ile kaydeder.
DI kaydı — AddKeycloak
ConfigureScheme her şemada şunları yapar:
MapInboundClaims = false—subclaim’inin korunması kritik (aksi haldeUserContextClaimsTransformationsubbulamaz, 403 üretir).ValidIssuers=[Issuer, PublicIssuer]— Docker dev’de internal (http://keycloak:8080) ile public (http://localhost:8080) issuer farklı olabilir.ValidAudiences=[ClientId, "account"].NameClaimType = "preferred_username",ClockSkew = 30s.OnMessageReceivedtoken kaynak önceliği: 1) cookie (CookieName) → 2)Authorization: Bearerheader → 3) query stringaccess_token(yalnızca/hubsve/filespath’lerinde — SignalR/FileServer için).
Yapılandırma anahtarları
Kullanım — çift realm
İlgili
Keycloak (genel)
Realm yapısı, provisioning, ortamlar, sorun giderme.
Authorization
Permission policy provider ve RBAC akışı.
JWT
Backoffice + OTPChallenge custom JWT şemaları.
OAuth
Google/Meta/Keycloak PKCE akışı.