Ana içeriğe geç

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 @ConfigurationProperties yapı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.


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#

java -jar application.jar --spring.profiles.active=redis

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.