1.1.5.5. Custom URL Authenticator#
Bu doküman, HvlAuthCustomUrlAuthenticatorImpl sınıfını kullanarak özelleştirilmiş bir URL üzerinden kimlik doğrulama akışını nasıl yapılandırabileceğinizi ve kullanabileceğinizi açıklamaktadır. Bu entegrasyon, dış REST servisi ile POST ( JSON/Form) ve GET istekleri kullanarak kimlik doğrulama işlemi yapılmasına olanak tanır.
Kullanım Amaçları#
HvlAuthCustomUrlAuthenticatorImpl, kullanıcı kimlik doğrulama isteklerini belirttiğiniz bir dış servis URL'sine ileterek doğrulama işlemlerini gerçekleştirir. Bu servis, genel olarak bir OpenID Connect veya OAuth sunucuya bağlanmak için kullanılır. Standart kimlik doğrulama yöntemlerinde yer almayan özel doğrulama ihtiyaçlarınızı karşılamak için ideal bir çözümdür.
Ayarlanabilir Parametreler#
| Değişken Adı | Değeri | Açıklama |
|---|---|---|
| CUSTOM_AUTH_TIMEOUT | 3000 | İstek zaman aşımı süresi (milisaniye). |
| CUSTOM_AUTH_READ_TIMEOUT | 3000 | Okuma zaman aşımı süresi (milisaniye). |
| CUSTOM_AUTH_URL | http://localhost:8089/realms/master/protocol/openid-connect/token | Kimlik doğrulama isteklerinin gönderileceği dış servis URL'si. |
| CUSTOM_AUTH_METHOD | GET/POST | REST isteği için kullanılacak HTTP yöntemi. |
| CUSTOM_AUTH_CONTENT_TYPE | application/x-www-form-urlencoded | İstek gövdesinin content type'ı. |
| CUSTOM_AUTH_ACCEPT_HEADER | application/json | İstek kabul başlığı. |
| CUSTOM_AUTH_USER_AGENT | HvlAuthProxy/1.0 | Kullanıcı agent bilgisi. |
| CUSTOM_AUTH_USERNAME_FIELD | username | İsteklerde kullanılan kullanıcı adı alanı. |
| CUSTOM_AUTH_PASSWORD_FIELD | password | İsteklerde kullanılan parola alanı. |
| additional-fields | grant_type: "password" client_id: "admin-cli" | Header için eklenecek diğer bilgileri key-value olarak eklenebilir. |
| CUSTOM_AUTH_USE_QUERY_PARAMS | true/false | GET isteğinde parametrelerin URL'ye eklenip eklenmeyeceği. |
| CUSTOM_AUTH_FORWARD_HEADERS | token,session_id | Gelen HTTP isteğinden alınarak dış servise iletilecek header key listesi (virgülle ayrılmış). |
| http-status | [200, 201, 202] | Başarılı login için http status kodları. |
| CUSTOM_AUTH_ERROR_FIELD | error | Hatalı login için dönülen error code bilgisinin işlendiği json property bilgisidir. |
| CUSTOM_AUTH_ERROR_DESCRIPTION_FIELD | error_description | Hatalı login için dönülen error description bilgisinin işlendiği json property bilgisidir. |
| error-code-mapping | wrong_credentials: ${ERROR_MAPPING_WRONG_CREDENTIALS:OAUTH-AUTH_0001} | Keysis mesajları ile eşleştirme yapılan parametrelerdir. key(custom server error code)-value(keysis error code) |
Header Forwarding (İstek Header'larını İletme)#
Custom Identity Provider'a yapılan kimlik doğrulama isteklerine, gelen HTTP isteğindeki belirli header'ları taşıma özelliği mevcuttur. Bu özellik, dış kimlik doğrulama servisinin ek bağlamsal bilgilere (örn: correlation ID, session bilgisi, tenant bilgisi vb.) ihtiyaç duyduğu senaryolarda kullanılır.
Kullanım Senaryoları#
- Oturum Takibi:
session_idveyatokengibi header'ların dış servise iletilmesi - İstek İzleme:
X-Correlation-IdveyaX-Request-Idgibi izleme header'larının aktarılması - Multi-Tenant Yapılar:
X-Tenant-Idgibi tenant bilgilerinin dış servise iletilmesi - Özel Kimlik Doğrulama: Dış servisin gerektirdiği özel header'ların aktarılması
Konfigürasyon Örnekleri#
Environment Variable ile:
# Tek header
export CUSTOM_AUTH_FORWARD_HEADERS=token
# Birden fazla header (virgülle ayrılmış)
export CUSTOM_AUTH_FORWARD_HEADERS=token,session_id
# Daha fazla header
export CUSTOM_AUTH_FORWARD_HEADERS=token,session_id,X-Correlation-Id,X-Tenant-Id
YAML Konfigürasyonu (Default Değerli):
hvl:
oauth:
auth:
custom-ip-authenticator:
request:
forward-headers: ${CUSTOM_AUTH_FORWARD_HEADERS:token,session_id}
YAML Konfigürasyonu (Liste Formatında):
hvl:
oauth:
auth:
custom-ip-authenticator:
request:
forward-headers:
- token
- session_id
- X-Correlation-Id
Docker/Docker Compose Kullanımı:
# docker-compose.yml
services:
auth-service:
environment:
- CUSTOM_AUTH_FORWARD_HEADERS=token,session_id,X-Correlation-Id
Önemli Notlar#
| Durum | Davranış |
|---|---|
| Header mevcut | Değeri dış servise iletilir |
| Header mevcut değil | Sessizce atlanır, hata oluşmaz |
| Boş konfigürasyon | Hiçbir header forward edilmez |
| Hassas header'lar | Log'larda maskelenir (auth, token, secret, password içerenler) |
| Aynı key'e sahip header çakışması | Forward edilen header, statik tanımlı header'ı override eder (üzerine yazar) |
Doğrulama#
Uygulama başlatıldığında, forward headers konfigürasyonu log'larda görüntülenir:
Mapping Yapılmasında Fayda Olacak Keysis Hata Kodları#
Dış servis hata kodu için keycloak örnek verilmiştir. Siz bağlantı kuracağınız custom authentication server'a ait error kodu girmelisiniz.
| Dış Servis Hata Kodu | İçsel Hata Kodu | Açıklama |
|---|---|---|
| invalid_grant | OAUTH-AUTH_0003 | Kullanıcı süresi dolmuş |
| wrong_credentials | OAUTH-AUTH_0001 | Yanlış kimlik bilgileri |
| user_locked | OAUTH-AUTH_0004 | Kullanıcı kilitli |
| unauthorized | OAUTH-AUTH_0005 | Yetkisiz erişim |
| password_must_be_changed | OAUTH-AUTH_0008 | Parola değiştirilmeli |
| authentication_code_wrong | OAUTH-AUTH_0009 | Hatalı kimlik doğrulama kodu |
| two_factor_disabled | OAUTH-AUTH_0010 | İki faktörlü kimlik doğrulama kapalı |
| unknown_auth_type | OAUTH-AUTH_0011 | Bilinmeyen kimlik doğrulama tipi |
| missing_kerberos_token | OAUTH-AUTH_0016 | Kerberos token eksik |
| no_mobile_number | OAUTH-AUTH_0017 | Mobil numara yok |
| user_inactive | OAUTH-AUTH_0021 | Kullanıcı aktif değil |
| account_temporarily_locked | OAUTH-AUTH_0022 | Hesap geçici olarak kilitli |
Angular Uygulaması Konfigürasyonu#
hvl-ng-framework-theme ile geliştirilmiş Angular uygulamalarında, login ekranında yapılacak istemlerin önceden belirlenmiş bir Custom Identity Provider (CUSTOM_IP) uygulamasına yönlendirilmesi gerekiyorsa, config.json dosyasında supportedAuthenticationTypes ayarı yapılmalıdır:
Eğer supportedAuthenticationTypes sadece bir değer içeriyorsa, sistem bu değere uygun olarak otomatik çalışır ve kullanıcının seçim yapmasına gerek kalmaz.
Ancak, supportedAuthenticationTypes değeri şöyle bir liste gibi birden fazla seçenek içeriyorsa:
Bu durumda, kullanıcıya bir açılır menü sunulacak ve seçim yapması istenecektir. Listede ilk sırada yer alan seçenek varsayılan olarak seçili olur.
Örnek Tam Konfigürasyon#
hvl:
oauth:
auth:
custom-ip-authenticator:
timeout: ${CUSTOM_AUTH_TIMEOUT:3000}
read-timeout: ${CUSTOM_AUTH_READ_TIMEOUT:3000}
endpoint:
url: ${CUSTOM_AUTH_URL:http://localhost:8089/realms/master/protocol/openid-connect/token}
method: ${CUSTOM_AUTH_METHOD:POST}
headers:
Content-Type: ${CUSTOM_AUTH_CONTENT_TYPE:application/x-www-form-urlencoded}
Accept: ${CUSTOM_AUTH_ACCEPT_HEADER:application/json}
User-Agent: ${CUSTOM_AUTH_USER_AGENT:HvlAuthProxy/1.0}
request:
username-field: ${CUSTOM_AUTH_USERNAME_FIELD:username}
password-field: ${CUSTOM_AUTH_PASSWORD_FIELD:password}
additional-fields:
grant_type: "password"
client_id: "admin-cli"
use-query-params: ${CUSTOM_AUTH_USE_QUERY_PARAMS:false}
forward-headers: ${CUSTOM_AUTH_FORWARD_HEADERS:token,session_id}
success:
http-status: [200, 201, 202]
error:
error-field: ${CUSTOM_AUTH_ERROR_FIELD:error}
error-code-mapping:
invalid_grant: ${ERROR_MAPPING_USER_EXPIRED:OAUTH-AUTH_0003}
wrong_credentials: ${ERROR_MAPPING_WRONG_CREDENTIALS:OAUTH-AUTH_0001}
user_locked: ${ERROR_MAPPING_USER_LOCKED:OAUTH-AUTH_0004}
unauthorized: ${ERROR_MAPPING_UNAUTHORIZED:OAUTH-AUTH_0005}