1.1.3.3. Yapılandırma
Yapılandırma#
Bu bölüm, hvl-oauth-oidc-client için önerilen yapılandırma parametrelerini açıklar.
Önemli Not
hvl-oauth-oidc-client ile uygulamalar yapıldığında cloud config olarak hvl-oauth2-security almalıdır.
Örnek application-hvl-oauth2-security.yml#
Aşağıdaki anahtarlar örnektir. Kütüphanedeki gerçek
@ConfigurationPropertiesyapınıza göre uyarlayın.
spring:
security:
oauth2:
client:
registration:
keysis-oidc:
provider: ${OAUTH2_KEYSIS_PROVIDER:keysis}
client-id: ${OAUTH2_KEYSIS_CLIENT_ID:*****}
client-secret: ${OAUTH2_KEYSIS_CLIENT_SECRET:ENC@[***]}
client-name: ${OAUTH2_KEYSIS_CLIENT_NAME:*****}
authorization-grant-type: ${OAUTH2_KEYSIS_AUTHORIZATION_GRANT_TYPE:authorization_code}
redirect-uri: '{baseUrl}/login/oauth2/code/keysis-oidc'
scope: ${OAUTH2_KEYSIS_SCOPE:openid,profile}
keycloak-oidc:
provider: keycloak-oidc
client-id: '***'
client-name: '***'
client-secret: '***'
authorization-grant-type: authorization_code
redirect-uri: '{baseUrl}/login/oauth2/code/keysis-oidc'
scope:
- openid
.
.
.
provider:
keysis:
issuer-uri: ${OAUTH2_PROVIDER_KEYSIS_ISSUER_URI:http://eksen.hvlnet.net:7080}
user-name-attribute: ${OAUTH2_PROVIDER_KEYSIS_USER_NAME_ATTRIBUTE:sub}
user-info-authentication-method: ${OAUTH2_PROVIDER_KEYSIS_USER_INFO_AUTH_METHOD:authorization_code}
keycloak-oidc:
issuer-uri: http://eksen.hvlnet.net:8085/realms/keysis
user-name-attribute: ${OAUTH2_PROVIDER_KEYSIS_USER_NAME_ATTRIBUTE:sub}
user-info-authentication-method: ${OAUTH2_PROVIDER_KEYSIS_USER_INFO_AUTH_METHOD:authorization_code}
session:
redis:
namespace: hvl::oauth::oidc-client
flush-mode: immediate
repository-type: indexed
server:
servlet:
session:
timeout: 30m
cookie:
name: CLIENT_SESSION
secure: false
http-only: true
same-site: Lax
domain: hvlnet.net
hvl:
security:
oauth2:
oidc:
redirect-path-after-logout: "/applications"
max-session: 5
user-info-service-retry-count: 3
user-info-service-retry-delay: 100
user-info-check-in-interval: 1
1. OAuth2 Client Davranışı#
Uygulama, bu yapılandırma ile OAuth2 standardında tanımlı Authorization Code Flow kullanan bir OAuth2 Client haline gelir.
Bu kapsamda uygulama:
- Kullanıcıyı kimlik doğrulama için keysis’e yönlendirir
- keysis tarafından üretilen authorization code’u alır
- Bu kodu access token ve ID token ile değiştirir
- Başarılı login sonrası kullanıcı için bir HTTP session oluşturur
Client tanımı, uygulamanın hangi Identity Provider ile ve hangi yetenekler (scope’lar) ile çalışacağını belirler.
2. Çoklu Identity Provider Desteği#
Yapılandırma, aynı uygulama içinde birden fazla OIDC uyumlu Identity Provider tanımına izin verir.
Bu sayede uygulama:
- Varsayılan olarak keysis ile çalışabilir
- Alternatif olarak Keycloak gibi başka IdP’lere bağlanabilir
- Ortama veya profile’a göre aktif IdP değiştirilebilir
Bu yaklaşım, uygulamanın tek bir kimlik sağlayıcısına bağımlı kalmadan genişleyebilmesini sağlar.
3. Identity Provider (IdP) Bilgileri#
Identity Provider yapılandırması, OAuth2 client’ın token, userinfo ve authorization süreçlerinde hangi endpoint’leri kullanacağını belirler.
Bu tanım sayesinde:
- keysis’in OIDC issuer adresi referans alınır
- Kullanıcıyı temsil eden temel claim belirlenir
- UserInfo endpoint çağrılarının nasıl yapılacağı tanımlanır
Issuer URI kullanımı, OIDC discovery mekanizması sayesinde endpoint yönetimini merkezi ve hatasız hale getirir.
4. Login Sonrası Session Yönetimi#
Başarılı OAuth2 login sonrasında oluşan kullanıcı durumu, Eksen Framework altyapısı ile yönetilir.
Yapılandırma iki farklı kullanım senaryosunu destekler:
- Varsayılan olarak uygulama belleğinde (in-memory) session
- Redis profili aktifken merkezi (distributed) session yönetimi
Redis tabanlı session kullanımı özellikle:
- Çoklu instance (cluster / Kubernetes) dağıtımlar
- Back-channel logout senaryoları
- Uygulama yeniden başlatıldığında oturum sürekliliği
için kritik öneme sahiptir.
5. HTTP Session Repository Davranışı#
Redis session repository ayarları, session’ların nasıl saklanacağını ve nasıl güncelleneceğini belirler.
Bu yapılandırma ile:
- Session’lar belirli bir namespace altında tutulur
- Kullanıcıya bağlı session’lar indekslenir
- Session değişiklikleri anında Redis’e yansıtılır
Bu yaklaşım, logout ve session invalidation işlemlerinin dağıtık ortamda tutarlı şekilde uygulanmasını sağlar.
6. HTTP Session ve Cookie Güvenliği#
Uygulama tarafındaki HTTP session ayarları, tarayıcı ile uygulama arasındaki state yönetimini kontrol eder.
Bu kapsamda:
- Session süresi merkezi olarak belirlenir
- Cookie adı kurumsal standartlara uygun hale getirilir
- Cookie’nin JavaScript tarafından erişilmesi engellenir
- SameSite politikası ile CSRF riskleri azaltılır
- Domain tanımı ile SSO davranışı kontrol altına alınır
Bu ayarlar, özellikle front-channel logout ve tarayıcı tabanlı SSO senaryolarında doğrudan etkilidir.
Session Storage (In-Memory / Redis)#
Bu kütüphane, org.springframework.session:spring-session-data-redis bağımlılığı içerir.
Varsayılan Davranış#
- Ekstra bir ayar yapılmazsa
- HTTP session’lar uygulama belleğinde (in-memory) tutulur.
Redis ile Session Kullanımı#
Redis tabanlı session için uygulama redis profili ile çalıştırılmalıdır.
Örnek#
7. Güvenlik Sınırları (Önemli)#
Bu yapılandırmanın yapmadıkları da en az yaptıkları kadar önemlidir:
- Kullanıcı doğrulama işlemi uygulama tarafından yapılmaz
- Token üretimi veya imzalama gerçekleştirilmez
- Identity yönetimi sağlanmaz
Tüm kimlik doğrulama ve token yaşam döngüsü, keysis Identity Provider sorumluluğundadır.
Logout Yapılandırması#
Front-channel ve back-channel logout davranışları, keysis üzerinde yapılan client tanımına ve uygulama tarafındaki endpoint yapılandırmasına bağlıdır.
Logout endpoint’lerinin keysis tarafında doğru şekilde tanımlanması gereklidir.
Özet#
Bu yapılandırma, uygulamayı OAuth2 / OIDC standartlarına uygun bir istemci haline getirir; keysis üzerinden login olan kullanıcılar için güvenli, merkezi ve ölçeklenebilir bir oturum yönetimi sağlar.