Skip to main content
Bu sistemde authentication (kimlik doğrulama) Keycloak’a, authorization (yetkilendirme) uygulamaya aittir. Keycloak sadece “bu token gerçek ve geçerli” der; “bu kullanıcı bu işlemi yapabilir mi” sorusunu uygulama yanıtlar.

İ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):
İki dünya birbirinden bağımsızdır: kullanıcı havuzları ayrı, scheme’ler ayrı, cookie isimleri ayrı (yan yana login durabilir), claim modelleri farklı (vatandaşta 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ındaki ClaimsTransformation 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ı

  1. AuthenticationJwtBearer token imzasını (RS256, JWKS), issuer’ı ve audience’ı doğrular.
  2. Dynamic permission policy[RequirePermission("users:read")]Permission:users:read policy adı → PermissionAuthorizationHandler permissions claim’ini kontrol eder.
  3. Active-account guard — tüm policy’lere implicit ActiveAccountRequirement eklenir; Pending/Banned/Suspended hesaplar geçemez ([AllowPendingAccount] ile bypass).
  4. Token versionTokenVersionMiddleware JWT’deki token_version ile DB’deki User.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.