Ana içeriğe geç

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ü#

  1. Son kullanıcı, kullanıcı ad, şifre ve authenticationType(default değeri db) bilgisiyle authentication'ın /auth/login ucuna istek gönderir.
  2. Kullanıcıdan gelen giriş bilgileri authenticationType değerine göre ldap, db vb doğrulama kaynağından doğrulanır.
  3. Eğer kullanıcı ad / şifre kombinasyonu doğru ise ;
    1. Çok faktörlü kimlik doğrulaması (Multi-factor authentication) aktif ise 4.adıma geçilir
    2. Aktif değil ise 10.adıma geçilir.
  4. Kullanıcının hatalı giriş sayısı, login süresi, two factor authentication aktiflik durumu vb. bilgilerine ulaşmak için system setting instance'dan sistem ayarları çekilir. Setting uygulaması ile ilgili ayrıntılı bilgiye üzerinden ulaşabilirsiniz.
  5. System instance ilgili ayarları döner.
  6. 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.
  7. Support Instance uygulaması Authentication'dan gönderilen event'i consume eder.
  8. Support Instance uygulaması consume ettiği event'in içerisindeki kodu kullanıcıya iletir.
  9. 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 15.adım ile kullanıcı hata kodu ile bilgilendirilir.
  10. Session bilgisi önbelleğe yazılır.
  11. Session bilgisi dönülür.
  12. Bu adımlar başarılı şekilde gerçekleştirildiğinde kullanıcı system user değil ise oluşturulan cookie cevaba eklenir ve kullanıcı tarafına iletilir. Adımlardan birinde meydana gelecek hata durumunda, hata cevaba eklenerek kullanıcı tarafına iletilir. System user için cookie yerine payload kısmına token ve session bilgileri eklenerek iletilir.

Sistemde aktif olması durumunda captcha doğrulaması yapılmaktadır. Bu aktiflik config.json'da bulunan enabled değeri ile yönetilmektedir.

  "application": {
    "captcha": {
      "enabled": true
    }
  }

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ü#

  1. Client /logout path'ine istek gönderir.
  2. Authentication server, mevcut kullanıcının valid bir token ının olup olmadığını kontrol etmek için session instance a gider.
  3. Kullanıcının session ını bilgilerini almak üzere Redis'e istek atılır.
  4. Kullanıcının session bilgileri alınır ve authentication instance a bu bilgileri döner.
  5. Session service, mevcut kullanıcının tokenının valid olup olmadığı bilgisini teyit edip authentication instance a döner.
  6. Authentication uygulaması token'ı silmek için Redis'e istek atar.
  7. Sessionın silindiği bilgisi authentication server a döner.
  8. 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.
  9. Veri tabanına JDBC transactionın başarıyla yazıldığı bilgisi dönülür.
  10. 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ü#

  1. Client /refresh path'ine istek gönderir.
  2. Kullanıcının mevcutta süresi bitmiş tokenının süresinin yenilenmesi için session instance'a istek atılır.
  3. İstek Redis'e yönlendirilir.
  4. Redis'ten token yenilendiğinin response'u döner.
  5. Response authentication instance'a yönlendirilir.
  6. 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#

  1. 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.
  2. İstek /authorize ucuna gelir.
  3. Kullanıcı tanımlanmış olan keysis login sayfasına yönlendirilir.
  4. Kullanıcı username/parola ile doğrulama yapar. Birden fazla profili varsa, sonrasında profil seçme ekranından seçim yapar.
  5. Doğrulama sonrası uygulama tarafına tek kullanımlık authorization code dönülür.
  6. Uygulama tarafı gelen authorization token ile birlikte clientId, application credentials (secret) /oauth/token ucuna istekte bulunur.
  7. Gelen istek doğrulanır.
  8. Sonrasında uygulama tarafına id token, access token ve refresh token verisi dönülür.
  9. Uygulama access token verisini kullanarak API'e erişim sağlar.
  10. 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.