Skip to main content
BuildingBlocks.OAuth paketi, harici kimlik sağlayıcılarla (Google, Meta, Keycloak) authorization-code + PKCE akışını tek bir provider-agnostik kontrat üzerinden yürütmek için gereken soyutlama ve modelleri barındırır. Somut HTTP istemcileri (KeycloakOAuthClient, GoogleIdentityOAuthClient, MetaIntegrationOAuthClient vb.) DiyanetCleanArchitecture.Infrastructure.Services.OAuth projesinde bu kontratı implement eder.
Provider implementasyonları, DI kaydı (AddOAuthProviders) ve uçtan uca giriş akışı Altyapı Servisleri / OAuth sayfasında anlatılır. Bu sayfa paketteki arayüz ve modellere odaklanır.

IOAuthClient<TUserInfo>

Tüm provider’lar bu generic kontratı uygular. TUserInfo, sağlayıcıya özgü kullanıcı profili tipidir (örn. GoogleUserInfoDto).
Keycloak istemcisi (KeycloakOAuthClient) PKCE verifier’ı Redis’te tuttuğu için imzası biraz farklıdır — ExchangeCodeAsync(code, state) alır ve verifier’ı cache’ten kendisi çözer. Bkz. PKCE’nin saklanması.

Modeller

PKCE — PkcePair

PkcePair ctor’unda otomatik üretilir. code_verifier 64 byte rastgele veridir; code_challenge ise verifier’ın SHA-256 özetinin Base64URL kodudur (S256 metodu).

PKCE’nin Redis’te saklanması

code_verifier, authorize ile callback istekleri arasında saklanmalıdır (iki ayrı HTTP isteği). Keycloak istemcisi bunu IDistributedCache (Redis) üzerinde state key’iyle tutar:
  • Anahtar: keycloak_pkce_{state}
  • TTL: 10 dakika (StateExpiry)
  • Callback’te alınır ve tek kullanımlık olarak hemen silinir (RemoveAsync)

Konfigürasyon — OAuthOptions

OAuth bölümüne bind edilir. Google ve Meta için iki ayrı flow (Identity ve Integration) tanımlanır; her flow kendi client kimliği ve endpoint’lerine sahiptir.
Keycloak OAuthOptions’tan çıkarılmıştır. Keycloak tek config bloğu olarak Keycloak section’ından okunur (BuildingBlocks.Keycloak.KeycloakOptions veya OAuth projesindeki KeycloakOptions). Endpoint URL’leri BaseUrl + Realm’dan otomatik hesaplanır ({BaseUrl}/realms/{Realm}/protocol/openid-connect/auth vb.), config’e yazılmaz.

Identity vs Integration

OAuthContextType iki kullanım senaryosunu ayırır:
  • Identity — kullanıcı bu provider ile giriş yapar (login/connect). Token uygulamaya kimlik kanıtlar.
  • Integration — kullanıcı zaten girişlidir; uygulama provider API’sine erişim için ek yetki alır (ör. Meta sayfa yönetimi). Farklı client/secret ve scope kullanır.

Kullanım — authorize → callback → exchange → userinfo

Keycloak istemcisinde adım 1/2 daha sadedir; verifier cache’i provider’ın kendi içindedir:
state parametresini her zaman sunucu tarafında imzalı/şifreli üretin ve callback’te doğrulayın — CSRF ve open-redirect saldırılarına karşı ilk savunma hattıdır.

İlgili

OAuth servisleri

Google/Meta/Keycloak istemcileri, AddOAuthProviders ve uçtan uca akış.

Keycloak

Çift realm JWT doğrulama ve claims transformation.

JWT

Exchange sonrası uygulama token’ının üretimi.

Cache

PKCE verifier’ının Redis’te saklanması.