Skip to main content
OAuth servisi src/DiyanetCleanArchitecture.Infrastructure.Services.OAuth projesindedir ve üç sağlayıcıyı destekler: Google, Meta ve Keycloak. Ortak soyutlama BuildingBlocks.OAuth paketinde tanımlıdır.

Soyutlama — IOAuthClient<TUserInfo>

Her sağlayıcı için iki istemci vardır:
  • Identity istemcisi — kullanıcı kimliği (login): IGoogleIdentityOAuthClient, IMetaIdentityOAuthClient.
  • Integration istemcisi — geniş kapsamlı entegrasyon izinleri (örn. Google Business, Meta sayfaları/Instagram/WhatsApp): IGoogleIntegrationOAuthClient, IMetaIntegrationOAuthClient.

PKCE — PkcePair (S256)

Tüm akışlar PKCE kullanır. PkcePair 64 byte rastgele code_verifier üretir ve SHA-256 ile code_challenge türetir (code_challenge_method=S256):

Akış (backend-driven)

1

Authorize

CreateAuthorizationRequestAsync(state) → PKCE üretir, sağlayıcının authorize URL’ini (client_id, redirect_uri, response_type=code, scope, code_challenge, state) kurar.
2

Code

Kullanıcı sağlayıcıda giriş yapar, callback URL’e code + state ile döner.
3

Exchange

ExchangeCodeAsync(code, codeVerifier) → token endpoint’ine grant_type=authorization_code ile POST atar, OAuthTokenResponse alır.
4

UserInfo

GetUserInfoAsync(accessToken) → userinfo endpoint’inden profil çeker.

Google

GoogleIdentityOAuthClient, authorize/exchange/userinfo akışını implemente eder. Ayrıca id_token doğrulayan ayrı bir bileşen vardır — GoogleIdTokenVerifier (Google.Apis.Auth):

Meta

MetaIdentityOAuthClient ve MetaIntegrationOAuthClient, Facebook v19.0 OAuth dialog ve Graph API endpoint’lerini kullanır. Integration scope’ları sayfa yönetimi, Instagram ve WhatsApp Business izinlerini içerir.

Keycloak

Keycloak istemcisi (KeycloakOAuthClient) diğerlerinden farklı olarak code_verifier’ı Redis’te saklar (IDistributedCache). Anahtar keycloak_pkce_{state}, TTL 10 dakika, tek kullanımlık (exchange’de okunup silinir):

Token doğrulama — KeycloakTokenValidator

Çift realm (Vatandaş + Personel) desteklenir. Validator, token’ı önce imza doğrulamadan okuyup iss claim’inden realm’i tespit eder, sonra ilgili realm’in JWKS endpoint’inden public key çekerek imzayı doğrular. JWKS 60 dakika IMemoryCache’te tutulur:
JwtSecurityTokenHandler MapInboundClaims = false ile kurulur — böylece claim’ler sub, email, name gibi orijinal OIDC isimleriyle gelir. Aksi halde Microsoft.IdentityModel bunları uzun ClaimTypes.* URL’lerine çevirir ve sub/email lookup’ları boş döner.
SecurityTokenSignatureKeyNotFoundException alınırsa JWKS bir kez forceRefresh: true ile yeniden çekilir (key rotation senaryosu).

Config — OAuth ve Keycloak

Google/Meta OAuth kök bölümünden, Keycloak ise Keycloak kök bölümünden bind edilir.

DI kaydı — AddOAuthProviders

Keycloak Kurulumu

Çift realm yapılandırması ve provisioning.

Auth Mimarisi

Login akışları, JWT ve RBAC entegrasyonu.