İki ayrı kimlik dünyası
API iki ayrı Keycloak realm’ından token kabul eder. Her realm için ayrı bir JWT Bearer scheme kaydedilir (src/BuildingBlocks/BuildingBlocks.Keycloak/KeycloakSchemeNames.cs):
citizen_id, personelde user_id).
Her iki scheme BuildingBlocks.Keycloak/DependencyInjection.cs içinde AddJwtBearer ile
kaydedilir; default scheme PersonelScheme’tir:
Token içindeki claim modeli
Doğrulanan token bir dizi claim taşır. Bazıları doğrudan Keycloak Protocol Mapper’dan, bazıları API tarafındakiClaimsTransformation zincirinden gelir
(DiyanetCleanArchitectureClaimTypes):
organization_id ve tenant_id eşdeğer kabul edilir. HttpContextCurrentTenant önce
tenant_id, yoksa organization_id claim’ine düşer. Dev provisioning yapılandırması
organization_id Protocol Mapper’ı kurar.İstek başına akış
Middleware sırasıProgram.cs içinde nettir:
Dört koruma katmanı
- Authentication —
JwtBearertoken imzasını (RS256, JWKS), issuer’ı ve audience’ı doğrular. - Dynamic permission policy —
[RequirePermission("users:read")]→Permission:users:readpolicy adı →PermissionAuthorizationHandlerpermissionsclaim’ini kontrol eder. - Active-account guard — tüm policy’lere implicit
ActiveAccountRequirementeklenir;Pending/Banned/Suspendedhesaplar geçemez ([AllowPendingAccount]ile bypass). - Token version —
TokenVersionMiddlewareJWT’dekitoken_versionile DB’dekiUser.TokenVersion’ı karşılaştırır; eşleşmezse 401 (RBAC değişiminde anında invalidasyon).
Bu bölümde
Authentication
Token edinimi, dual JwtBearer, cookie + header + query, refresh rotation, token version.
Authorization
Dinamik permission policy, handler’lar, roller, RolePermission seed.
Multi-Tenancy
organization_id/tenant_id claim, soft-tenant, pipeline izolasyonu.Keycloak Genel Bakış
Çift realm, client’lar, provisioning ve ortam yönetimi.