İki faktörlü kimlik doğrulama, kullanıcı açısından çok banal bir süreç gibi görünebilir. Birçoğu, birçok uygulamayı kullanırken, tanıdık bir giriş ve şifre kombinasyonu girmenin yeterli olmadığı gerçeğine uzun zamandır alışmıştır. Ek güvenlik ve yetkisiz erişimi önlemek için ek bir doğrulama faktörü eklenmiştir. Çoğu durumda, e-posta veya SMS ile alınabilen benzersiz bir koddur.

Bu eğitimde, AppMaster iki faktörlü kimlik doğrulamayı nasıl uygulayabileceğinizi öğreneceğiz. Örnek olarak, kodun postaya gönderilmesi kullanılacaktır. Hangi modüllerin bağlanması gerektiğini, hangi ayarların yapılacağını, hangi iş sürecinin oluşturulacağını ve bitmiş sonucun pratikte nasıl kontrol edileceğini analiz edeceğiz.

Öncelikle genel plana bir göz atalım. İş sürecimizde hangi adımların uygulanması gerekiyor?

  1. Giriş doğrulaması (kullanıcının gerçekten kayıtlı olduğundan emin olun).
  2. Şifrenin doğru olup olmadığını kontrol etme.
  3. Posta veya SMS ile bir onay kodu gönderme.
  4. Kodun alaka düzeyini kontrol etme.
  5. Kodun doğruluğunu kontrol etmek.
  6. Kimlik doğrulamanın tamamlanması.

hazırlık aşaması

İki faktörlü kimlik doğrulamayı tasarlamaya başlamadan önce bile, kullanıcı kaydı aşamasında şunlardan emin olmanız gerekir:

  • Kullanıcı verileri bir e-posta içermelidir. Doğrulama kodunu göndermek için kullanılacaktır. E-posta genellikle bir giriş olarak kullanılır ve biz sadece böyle bir örneğe bakacağız.
  • Giriş benzersizdir. Sistemde aynı login ile iki farklı kullanıcı bulunamaz.

Bu (ve diğer birçok) görevi çözmenin rahatlığı için, Auth modülü her AppMaster projesinde varsayılan olarak kurulur. Kullanımları için gerekli veritabanı modellerini, iş süreci bloklarını ve uç noktaları içerir.

auth module

Giriş doğrulaması

Giriş, şifre ve doğrulama kodu, iş sürecinin giriş parametreleri olarak kullanılır. Ancak ilk aşamada sadece bir girişe ihtiyacımız var. Bu kullanıcının var olduğundan emin olmak yardımcı olacaktır. Kayıtlı ve onunla ilgili bilgiler veritabanında saklanıyor.

user check

Bunu yapmak için, DB: Search User bloğu, veritabanında verilen oturum açma bilgilerine sahip bir kullanıcıyı arar. Tam bir eşleşme aramak için SearchExact = True parametresini ayarladığınızdan emin olun.

Alınan veriler 0 indeksli Array Element bloğuna iletilir (sayma sıfırdan başlar ve bulunan tek değer her zaman dizideki 0 indeksine karşılık gelir).

Is Null bloğu, kullanıcının gerçekten bulunup bulunmadığını kontrol eder. Ve sonuca bağlı olarak ( True/False ), If-Else bloğu iş sürecini ya bir hata mesajı ile keser ( Raise Error bloğu ) ya da daha fazla yönlendirir.

Şifre kontrolü

Bu aşamada kullanıcı şifresinin doğru girildiğinden emin olmanız gerekmektedir.

password check

Ve burada, şifrelerin veri tabanında açıkça saklanmadığını anlamak önemlidir. Bcrypt işlevi bunları özetler ve yalnızca elde edilen karma veritabanında depolanır. Dolayısıyla bir veri sızıntısı olacağını varsaysak bile saldırganlar yine de kullanıcı şifrelerini bulamayacaklar; güvenli bir şekilde şifrelenirler.

Bu nedenle sadece veritabanından şifreyi alıp girilen şifre ile karşılaştıramazsınız. Parolanın karmasını almanız ve karşılaştırma için kullanmanız gerekir. Bu sorunu çözmek için Auth: Probe Password bloğu kullanılır. Giriş parametresi olarak kullanıcı tarafından girilen parolayı ( password ) ve veri tabanında depolanan parolanın hash değerini ( hashed_password ) alır ve String veri tipine ( To String bloğu) dönüştürür.

Sonuca bağlı olarak bir önceki adımda olduğu gibi If-Else bloğunu kullanarak ya bir hata mesajı ( Raise Error , Message = Password is wrong ) gösteriyoruz ya da işlemi bir sonraki aşamaya yönlendiriyoruz.

Kullanıcı modeli uzantısı

Bir sonraki adım için kullanıcı modelinde küçük bir değişiklik yapmanız ve onaylanması gereken kod hakkında bilgi eklemeniz gerekiyor.

Genel olarak, User modeli başlangıçta bu görev için kullanılabilecek alanları içerir - Confirmed, Confirmation code, Confirmation code expires at . Ancak bu örnekte, bu alanların yalnızca kayıt ve ilk hesap doğrulaması için kullanıldığını varsayacağız.

Sürecin daha net anlaşılması için, ayrı bir iki twofa ( two-factor authentication ) modeli oluşturalım, User modelini bununla ilişkilendirelim (1'e 1 ilişki, has one ) ve bir alan code ekleyelim ( String türü).

user model

E-posta göndermeye hazırlanıyor

Onay kodlu e-postalar göndermek için ön hazırlık yapılmalıdır. En erişilebilir seçeneklerden biri, kurmanız ve yapılandırmanız gereken Custom SMTP modülünü kullanmaktır.

custom SMTP module

Gmail kullanırken, çoğu ayar varsayılan olarak zaten ayarlanmıştır ve kullanıcı adınızı ve şifrenizi eklemeniz gerekir. Diğer posta sunucularını kullanırken, gerekli verileri elde etmek için belgelerine başvurmanız yardımcı olacaktır.

Bu durumda, posta sunucusunun güvenlik ayarlarını biraz değiştirmeniz gerekebilir. Örneğin, Gmail varsayılan olarak üçüncü taraf uygulamaları kullanan bağlantıları engelleyebilir ve ayarlardan bu kısıtlamayı kaldırmanız gerekir.

Doğrulama kodu gönderme

Kullanıcı adı ve şifreyi kontrol ettik ve gerekli tüm hazırlıkları tamamladık, şimdi onay koduyla bir mektup göndermeye devam edebilirsiniz.

send email

Custom SMTP: Send Email bloğu, hedef olarak bir dizi adres kullanır. Bu nedenle sadece bir adrese mektup göndermeniz gerekse bile diziye eklenmelidir. Bunun için Append Array bloğu kullanılır.

Bir sonraki adım, bir doğrulama kodu oluşturmaktır. Random string bloğu bunun için uygundur. 6 rastgele sayıdan oluşan bir kod göndereceğiz ve uygun ayarları yapacağız. Length = 6, With 0-9 = True diğer tüm parametreler = False .

Ardından, mektubun metnini oluşturmanız gerekir. Bunu yapmak için, oluşturulan koda açıklayıcı metin eklemek için Concat Strings bloğunu kullanın ( First = Verification code: ), sonucu Text veri türüne dönüştürün ( To Text bloğu) ve sonucu e-postanın body parametresine bağlayın blok gönderiyor.

Son gönderim için sadece mektubun konusunu ( subject ) ve göndericiyi ( from_name ) belirtmek kalır.

Ancak sadece kodu göndermek yeterli değildir; ayrıca kullanıcının verilerinde de saklanmalıdır. Sonuçta, kullanıcı kodu aldığında ve onay olarak geri gönderdiğinde doğruluğunu doğrulamanız gerekir.

save twofa

Bunu yapmak için, daha önce ihtiyatlı bir şekilde oluşturduğumuz twofa modelini kullanacağız. Bu ilk kod gönderimiyse, hangi kullanıcıya ait olduğu bilgisi ile oluşturmalısınız. Yeniden kullanım durumunda, kimliğini ve yeni kodunu belirterek mevcut girişi yamalamak gerekir.

Aşamanın son adımı, kodun e-postaya gönderilmesiyle ilgili bir mesaj döndürmek için Raise Error bloğunu kullanmaktır.

Kod alaka kontrolü

Ek güvenlikle ilgilenmeye ve kodu banal bir numaralandırmadan korumaya değer. Giriş denemelerinin sayısını, sıklıklarını ve gönderilen kodun ömrünü sınırlamak akıllıca olacaktır. Tüm bu örnekleri analiz etmeyeceğiz; güvenlik gereksinimleri her proje için ayrıdır ve birçok farklı koşulu içerebilir. Kendimizi kodun geçerliliğini geçerlilik süresine göre kontrol etmekle sınırlandırıyoruz.

code lifetime check

Geçerli saati almak için Current date & time bloğunu kullanalım. Date & time difference bloğunun B parametresine bağlayın. A parametresi olarak twofa modelinin UpdatedAt alanını kullanacağız.

Sonuç olarak, Time span elde ederiz - iki zaman noktası arasındaki fark. Sadece bu farkın seçilen belirli bir değeri aşıp aşmadığını kontrol etmek için kalır. Örneğimizde bu, Greater bloğun statik değeri B olarak ayarladığımız 5 dakikadır.

time span value

If-Else bloğu, süreci daha fazla yönlendirmek için karşılaştırma sonucunu kullanır. True ise (fark 5 dakikayı aşıyorsa), işlem mektubu gönderme adımına dönecektir; kullanıcı güncellenmiş bir kod alacaktır. False olması durumunda (kod yeni ve güncel), bu kodu kontrol etmek için devam etmek mümkün olacaktır.

Kod incelemesi

Kimlik doğrulamanın son aşaması, alınan kodu kontrol etmektir.

code check

Equal bloğu, kullanıcı tarafından iletilen kodun, kullanıcıyla ilişkili iki twofa modelinde depolanan kodla eşleştiğini doğrulamalıdır. Eğer durum böyle değilse ve kod yanlış belirtilmişse ( If-Else -> False ), o zaman bir hata mesajı görüntülemeniz gerekir ( Raise Error , Message = Code is wrong false ). Karşılaştırma eşleşmeyi doğrularsa, son kimlik doğrulama aşamasına geçebilirsiniz.

Bunu yapmak için Auth: Authentication bloğunu kullanıyoruz ve yetkilendirme jetonu ile kullanıcı hakkında bilgi alıyoruz. Başarılı kimlik doğrulama sonucunda bunları End bloğuna geçiriyoruz.

Uç nokta oluşturma

İş süreci oluşturuldu ancak henüz kullanıma hazır değil. Bu iş sürecini çalıştıracak bir uç nokta oluşturmanız gerekir.

2fa endpoint

Makul bir çözüm, varsayılan kimlik doğrulama bitiş noktasını ( POST /Auth ) kullanmak olacaktır. İş sürecini değiştirmek ve yeni oluşturulmuş olanı yüklemek yeterli olacaktır. Böylece, basit kimlik doğrulama devre dışı bırakılacak ve bunun yerine iki faktörlü kimlik doğrulama kullanılacaktır.

Yayın ve test

Bu, iki faktörlü kimlik doğrulamanın oluşturulmasını tamamlar. Sonucu yayınlayabilir ve çalışırken kontrol edebilirsiniz. Bunun için Preview düğmesinin Project API bölümünde Dağıtım planının adına tıklayarak erişilebilen Swagger kullanmak uygundur.

project API

Geriye sadece listede istenen bitiş noktasını bulmak, kullanıcı verilerini girmek ve Execute butonu ile yürütmeyi başlatmak kalıyor. Test sırasında herhangi bir hata bulunursa, iş sürecine geri dönün ve gerekli değişiklikleri yapın.

Swagger

Was this article helpful?

AppMaster.io 101 Çarpışma Kursu

10 Modüller
2 haftalar

Nereden başlayacağınızdan emin değil misiniz? Yeni başlayanlar için hızlandırılmış kursumuzla başlayın ve AppMaster'ı A'dan Z'ye keşfedin.

Kursa Başlayın
Development it’s so easy with AppMaster!

Daha Fazla Yardıma mı ihtiyacınız var?

Herhangi bir sorunu uzmanlarımızın yardımıyla çözün. Zamandan tasarruf edin ve uygulamalarınızı oluşturmaya odaklanın.

headphones

İletişim desteği

Bize sorununuzu anlatın, size bir çözüm bulalım.

message

Topluluk Sohbeti

Soruları sohbetimizde diğer kullanıcılarla tartışın.

Topluluğa Katılın