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ım bu istek yaşam döngüsünde çalışmaz.
  13. Bu adım bu istek yaşam döngüsünde çalışmaz.
  14. Bu adım bu istek yaşam döngüsünde çalışmaz.
  15. 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.

Varsayılan (Default) Yaşam Döngüsü#

  1. Client /login haricinde herhangi bir path'e istek gönderir. (örn : /logout, /refresh)
  2. Bu adım bu istek yaşam döngüsünde çalışmaz.
  3. Bu adım bu istek yaşam döngüsünde çalışmaz.
  4. Bu adım bu istek yaşam döngüsünde çalışmaz.
  5. Bu adım bu istek yaşam döngüsünde çalışmaz.
  6. Bu adım bu istek yaşam döngüsünde çalışmaz.
  7. Bu adım bu istek yaşam döngüsünde çalışmaz.
  8. Bu adım bu istek yaşam döngüsünde çalışmaz.
  9. Bu adım bu istek yaşam döngüsünde çalışmaz.
  10. Bu adım bu istek yaşam döngüsünde çalışmaz.
  11. Bu adım bu istek yaşam döngüsünde çalışmaz.
  12. Kullanıcı güvenlik ve yetki kontrolü (security check) yapılır. Kontrol başarılı ise bir sonraki adıma geçilir. Değil ise 13. adım ile kullanıcı hata mesajı ile bilgilendirilir.
  13. Kullanıcı session bilgisi önbelleğe (cache) işlenir.
  14. Kullanıcının session ile ilgili gerçekleştirdiği isteğin cevabı dönülür.
  15. İlgili isteğin response bilgili kullanıcıya dönülür. Adımlardan birinde meydana gelecek hata durumunda, hata cevaba eklenerek kullanıcı tarafına iletilir.

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.