1.1. Authentication#
Authentication, kullanıcı doğrulama işleminin yapıldığı uygulamadır.
Yetenekler#
Bu uygulama temelde kullanıcılara :
- Giriş (login)
- Çıkış (logout)
- Oturum tazeleme (refresh)
- Çok faktörlü kimlik doğrulaması (Multi-factor authentication)
- OIDC Provider
yeteneği sağlar.
İstek Yaşam Döngüsü(Request Lifecycle)#

Authentication istek yaşam döngüsü 2 farklı yaşam döngüsüne sahiptir.
Giriş(Login) Yaşam Döngüsü#
- Client Auth uygulamasına oturum açmak için kullanıcı adı/parola/type verisi ile
/auth/loginucuna istek gönderir. - Auth Uygulaması runtime ayarlarını çekmek için setting uygulamasına istek atar. (in-memory cache'de varsa istek instance'dan alınır.)
- Setting uygulaması runtime verisini almak için storage'a istek atar. (db/cache) Setting uygulaması ile ilgili ayrıntılı bilgiye üzerinden ulaşabilirsiniz.
- Data storage'dan sonuç döner.
- Auth uygulaması runtime ayarlarını almak için attığı istek sonucu alır ve cache'ler.
- Client'ın gönderdiği type verisine göre kullanıcı doğrulama kaynağından kullanıcı doğrulamak için istek atılır.
- Kaynaktan sonuç döner
- Kullanıcı doğrulama başarılı gerçekleşmişse 8.adıma geçilir.
- Kullanıcı doğrulama hatalı ise client'a exception dönülür.
- Çok faktörlü doğrulama aktif ise :
- Verification türüne (sms, mail vb.) göre kullanıcının ilgili erişim bilgisine oluşturulan kodun gönderilmesi için Kafka'ya ilgili event atılır.
- Support Instance uygulaması Authentication'dan gönderilen event'i consume eder.
- Support Instance uygulaması consume ettiği event'in içerisindeki kodu kullanıcıya iletir.
- Kullanıcı oluşturulan kod ile tekrar istek gönderir. Gönderilen kodun doğrulama işlemi başarılı şekilde sonlandırıldıysa bir sonraki adıma geçilir. Doğrulanamadığı durumdaysa kullanıcı hata kodu ile bilgilendirilir.
- Kullanıcıya token dönülür.
- Kullanıcı Profil Listesini çekmek için authz'e istek atar.
- SV: Kullanıcının istekle beraber gönderdiği token parse edilir ve oturum doğrulaması sağlanır.
- Eğer oturum doğrulaması başarılı ise 10.adıma geçilir.
- Hatalı ise kullanıcıya exception dönülür.
- SV: Kullanıcının istekle beraber gönderdiği token parse edilir ve oturum doğrulaması sağlanır.
- Authz Uygulaması runtime ayarlarını çekmek için setting uygulamasına istek atar. (in-memory cache'de varsa istek instance'dan alınır.)
- Eğer istekte belirtilen ayar setting uygulamasında yoksa 3.ve 4.adımlar işlenir.
- Authz uygulaması runtime ayarlarını almak için attığı istek sonucu alır ve cache'ler.
- Authz uygulaması aktif oturuma ait olan profile listesini sorgular.
- Sorgu sonucunu alır.
- Sorgu sonucunu Client'a döner.
- Client uygulaması seçtiği profil verisi ile oturum yetki alanını belirlemek için istek atar.
- SV: Kullanıcının istekle beraber gönderdiği token parse edilir ve oturum doğrulaması sağlanır. Doğrulama başarılı olursa 15.adıma geçilir. Değilse client'a exception dönülür.
- Authz uygulaması gönderilen profile ait yetkileri sorgular.
- Sorgu sonucuna göre SE Adımı gerçekleşir ve oturum yetkisi ile enhance edilir.
- Client tarafa istek sonucu döner.
- Client tarafı elde ettiği token ile APP-A'ya istek atar.
- SV: Eğer uygulama güvenlik bloğundaysa oturum doğrulama işlemi gerçekleşir.
Sistemde aktif olması durumunda captcha doğrulaması yapılmaktadır. Bu aktiflik config.json'da bulunan enabled değeri ile yönetilmektedir.
Captcha giriş, kayıt ve şifre yenileme ekranlarında bulunmaktadır. Sistemde Google Captcha kullanıldığı için kurulum yapılacak ortam için bir hesap oluşturulması ve ilgili link üzerinden örnekte olduğu gibi sisteme ait domain bilgisi eklenmelidir.


Çıkış (Logout) Yaşam Döngüsü#
- Client /logout path'ine istek gönderir.
- Authentication server, mevcut kullanıcının valid bir token ının olup olmadığını kontrol etmek için session instance a gider.
- Kullanıcının session ını bilgilerini almak üzere Redis'e istek atılır.
- Kullanıcının session bilgileri alınır ve authentication instance a bu bilgileri döner.
- Session service, mevcut kullanıcının tokenının valid olup olmadığı bilgisini teyit edip authentication instance a döner.
- Authentication uygulaması token'ı silmek için Redis'e istek atar.
- Sessionın silindiği bilgisi authentication server a döner.
- Authentication service, producesync methodunu kullanarak, kullanıcının logout bilgisini, LOGGER uygulamasının outbox patterrn yaklaşımını ele alarak elastic search e işlenmesi için veri tabanı kaydı olarak oluşturur.
- Veri tabanına JDBC transactionın başarıyla yazıldığı bilgisi dönülür.
- Authentication service, client tarafındaki session ve cookie/token bilgisini temizler ve sessionın başarıyla kapatıldığı cevabını HTTP response ile client’a gönderir.

Yenileme (Refresh) Yaşam Döngüsü#
- Client /refresh path'ine istek gönderir.
- Kullanıcının mevcutta süresi bitmiş tokenının süresinin yenilenmesi için session instance'a istek atılır.
- İstek Redis'e yönlendirilir.
- Redis'ten token yenilendiğinin response'u döner.
- Response authentication instance'a yönlendirilir.
- Kullanıcının session ı yenilendiği bilgisi kullanıcıya döner.
OIDC Provider Yeteneği#
OIDC OAuth 2.0 üzerine inşa edilmiş, web ve mobil uygulamaların kullanıcı gişir işlemleri için yoğunlukla kullanılan , spesifik olarak kullanıcı doğrulama konusu üzerine odaklanmış kimlik doğrulama protokolü(identity authentication protocol)'dür. Third-party uygulamaların, SSO üzerinden keysis login ekranı vasıtasıyla giriş yapabilmesini sağlar. oauth-auth-server veya composite oauth-server uygulamalarının "oidc" profili ile ayağa kaldırılması ile bu yetenek uygulamaya kazandırılmış olur.
Sunulan OIDC Endpoint Discovery sayesinde oidc client'lar için ihtiyaç duyulan endpoint ayarları sunulmaktadır. (Örn : http://eksen.bulut.ai/gw/auth-server/.well-known/openid-configuration)
Authorization Code Flow#

- Kullanıcı third-party uygulamasına(Regular Web App) yetkisi olmadığı için giriş ekranına yönlendirilir veya kendisi login ekranına gider. Daha önce keysis identity provider ile entegrasyon sağlamış uygulama arayüzünde 'keysis ile giriş' butonuna tıklar.
- İstek /authorize ucuna gelir.
- Kullanıcı tanımlanmış olan keysis login sayfasına yönlendirilir.
- Kullanıcı username/parola ile doğrulama yapar. Birden fazla profili varsa, sonrasında profil seçme ekranından seçim yapar.
- Doğrulama sonrası uygulama tarafına tek kullanımlık authorization code dönülür.
- Uygulama tarafı gelen authorization token ile birlikte clientId, application credentials (secret) /oauth/token ucuna istekte bulunur.
- Gelen istek doğrulanır.
- Sonrasında uygulama tarafına id token, access token ve refresh token verisi dönülür.
- Uygulama access token verisini kullanarak API'e erişim sağlar.
- API istenen verilerle yanıt verir.
User Fields#
- expiration_date -> Kullanıcının geçerlilik süresini belirler. Sistemde kullanıcının aktif olarak bulunabileceği süredir.
- failed_login_count -> Kullanıcının hatalı giriş sayısının tutulduğu alandır. her hatalı girişte bu sayı artar ve sistem ayarlarında belirlenen "failed_count" değerine ulaşan kullacılar kilitlenir.
- locked_date -> Hatalı giriş sayısı sistem ayarlarında belirlenen "failed_count" değerine ulaşan kullanıcılar için bu alan kullanılır.
- password_expiration_date -> Kullanıcı parolasının geçerlilik süresidir. Giriş tarihi bu süreyi geçtiğinde kullanıcı parola yenilemeye yönlendirilir.
- password_must_change -> Parola geçerlilik süresi dolmuş kullanıcılar için kullanılan alandır.
- last_login_date -> Kullanıcının son giriş tarihinin tutulduğu alandır.
- system -> Sistem kullanıcısını işaretlemek için kullanılan alandır. Bu kullanıcıların session'ları süresiz olur ve login isteklerine cookie ile değil payload ile token ve session bilgileri eklenir.
- admin -> Bu yetenek hiyerarşik yetki ile performnaslı bir şekilde sağlandığı için bir sonraki sürümde kullanılmayacaktır.