Otentikasi dua faktor bisa tampak seperti proses yang sangat dangkal di pihak pengguna. Banyak yang sudah lama terbiasa dengan fakta bahwa ketika menggunakan banyak aplikasi, tidak cukup memasukkan kombinasi login dan kata sandi yang sudah dikenal. Faktor verifikasi tambahan diperkenalkan untuk keamanan tambahan dan untuk mencegah akses yang tidak sah. Dalam kebanyakan kasus, ini adalah kode unik yang dapat diterima melalui email atau SMS.

Dalam tutorial ini, kita akan belajar bagaimana Anda dapat menerapkan otentikasi dua faktor di AppMaster . Sebagai contoh, mengirim kode ke surat akan digunakan. Kami akan menganalisis modul mana yang perlu dihubungkan, pengaturan apa yang harus dibuat, proses bisnis apa yang harus dibuat, dan bagaimana memeriksa hasil akhir dalam praktik.

Pertama, mari kita lihat rencana umumnya. Langkah-langkah apa yang perlu diterapkan dalam proses bisnis kita?

  1. Verifikasi login (pastikan pengguna benar-benar terdaftar).
  2. Memeriksa apakah kata sandi sudah benar.
  3. Mengirim kode konfirmasi melalui surat atau SMS.
  4. Memeriksa relevansi kode.
  5. Memeriksa kebenaran kode.
  6. penyelesaian otentikasi.

Tahap persiapan

Bahkan sebelum Anda mulai merancang otentikasi dua faktor, pada tahap pendaftaran pengguna, Anda harus yakin bahwa:

  • Data pengguna harus berisi email. Ini akan digunakan untuk mengirim kode verifikasi. E-mail sering digunakan sebagai login, dan kita akan melihat contoh seperti itu.
  • Loginnya unik. Dua pengguna berbeda dengan login yang sama tidak dapat ada di sistem.

Untuk kenyamanan menyelesaikan tugas-tugas ini (dan banyak lainnya), modul Auth diinstal secara default di setiap proyek AppMaster . Ini berisi model database yang diperlukan, blok proses bisnis, dan titik akhir untuk penggunaannya.

auth module

Verifikasi masuk

Login, password, dan kode verifikasi digunakan sebagai parameter input proses bisnis. Namun pada tahap pertama, kita hanya perlu login. Ini akan membantu untuk memastikan bahwa pengguna ini ada. Dia telah terdaftar, dan informasi tentangnya disimpan dalam database.

user check

Untuk melakukan ini, blok DB: Search User mencari pengguna dengan login yang diberikan dalam database. Pastikan untuk menyetel parameter SearchExact = True untuk mencari kecocokan persis.

Data yang diterima diteruskan ke blok Array Element dengan indeks 0 (penghitungan dimulai dari nol, dan satu-satunya nilai yang ditemukan akan selalu sesuai dengan indeks 0 dalam array).

Blok Is Null memeriksa apakah pengguna benar-benar ditemukan. Dan tergantung pada hasilnya ( True/False ), blok If-Else akan mengganggu proses bisnis dengan pesan kesalahan ( Raise Error block) atau mengarahkannya lebih jauh.

Pemeriksaan kata sandi

Pada tahap ini, Anda perlu memastikan bahwa kata sandi pengguna dimasukkan dengan benar.

password check

Dan di sini, penting untuk dipahami bahwa kata sandi tidak disimpan secara eksplisit dalam database. Fungsi Bcrypt hash mereka, dan hanya hash yang dihasilkan disimpan dalam database. Oleh karena itu, meskipun kami berasumsi bahwa kebocoran data akan terjadi, penyerang tetap tidak dapat menemukan kata sandi pengguna; mereka dienkripsi dengan aman.

Untuk alasan ini, Anda tidak bisa begitu saja mendapatkan kata sandi dari database dan membandingkannya dengan kata sandi yang dimasukkan. Anda perlu mendapatkan hash kata sandi dan menggunakannya untuk perbandingan. Untuk mengatasi masalah ini, blok Auth: Probe Password digunakan. Sebagai parameter input, dibutuhkan kata sandi yang dimasukkan oleh pengguna ( password ) dan hash kata sandi yang disimpan dalam database ( hashed_password ) dan mengubahnya menjadi tipe data String (blok To String ).

Tergantung pada hasilnya, seperti pada langkah sebelumnya, dengan menggunakan blok If-Else , kita akan menampilkan pesan kesalahan ( Raise Error , Message = Password is wrong ) atau mengarahkan proses ke tahap berikutnya.

Ekstensi model pengguna

Untuk langkah selanjutnya, Anda perlu membuat perubahan kecil pada model pengguna dan menambahkan informasi tentang kode yang perlu dikonfirmasi.

Secara umum, model User awalnya berisi bidang yang dapat digunakan untuk tugas ini - Confirmed, Confirmation code, Confirmation code expires at . Tetapi dalam contoh ini, kami akan menganggap bahwa bidang ini hanya digunakan untuk pendaftaran dan verifikasi akun awal.

Untuk kejelasan proses yang lebih besar, mari buat model twofa ( two-factor authentication ) terpisah, kaitkan model User dengannya (hubungan 1-ke-1, has one ), dan tambahkan satu code bidang ( Tipe String ).

user model

Bersiap untuk mengirim email

Untuk mengirim email dengan kode konfirmasi, seseorang harus mempersiapkan pendahuluan. Salah satu opsi yang paling mudah diakses adalah menggunakan modul Custom SMTP , yang perlu Anda instal dan konfigurasikan.

custom SMTP module

Saat menggunakan Gmail , sebagian besar setelan sudah disetel secara default, dan Anda perlu menambahkan nama pengguna dan sandi. Saat menggunakan server email lain, akan membantu jika Anda merujuk ke dokumentasi mereka untuk mendapatkan data yang diperlukan.

Dalam hal ini, Anda mungkin perlu sedikit mengubah pengaturan keamanan server email. Misalnya, Gmail dapat memblokir koneksi menggunakan aplikasi pihak ketiga secara default, dan Anda harus menghapus batasan ini di setelan.

Mengirim kode verifikasi

Kami memeriksa login dan kata sandi dan menyelesaikan semua persiapan yang diperlukan, jadi sekarang Anda dapat melanjutkan untuk mengirim surat dengan kode konfirmasi.

send email

Custom SMTP: Send Email menggunakan larik alamat sebagai tujuan. Oleh karena itu, meskipun Anda hanya perlu mengirim surat ke satu alamat, itu harus ditambahkan ke array. Untuk ini, blok Append Array digunakan.

Langkah selanjutnya adalah membuat kode verifikasi. Blok Random string cocok untuk ini. Kami akan mengirimkan kode yang terdiri dari 6 angka acak dan melakukan pengaturan yang sesuai. Length = 6, With 0-9 = True , semua parameter lainnya = False .

Selanjutnya, Anda perlu membuat teks surat. Untuk melakukan ini, gunakan blok Concat Strings untuk menambahkan teks penjelasan ke kode yang dihasilkan ( First = Verification code: ), ubah hasilnya menjadi tipe data Text ( Blok To Text ), dan hubungkan hasilnya ke parameter body email mengirim blok.

Untuk pengiriman terakhir, tinggal menentukan subjek surat ( subject ) dan pengirim ( from_name ).

Tetapi tidak cukup hanya dengan mengirim kode; itu juga harus disimpan dalam data pengguna. Lagi pula, Anda perlu memverifikasi kebenarannya ketika pengguna menerima kode dan mengirimkannya kembali sebagai konfirmasi.

save twofa

Untuk melakukan ini, kita akan menggunakan model twofa , yang kita buat dengan hati-hati sebelumnya. Jika ini adalah pengiriman kode pertama, Anda harus membuatnya dengan informasi tentang milik pengguna mana. Dalam hal penggunaan kembali, perlu untuk menambal entri yang ada, yang menunjukkan ID dan kode barunya.

Langkah terakhir dari tahap ini adalah menggunakan blok Raise Error untuk mengembalikan pesan tentang pengiriman kode ke email.

Pemeriksaan relevansi kode

Perlu menjaga keamanan tambahan dan melindungi kode dari enumerasi dangkal. Akan lebih bijaksana untuk membatasi jumlah upaya input, frekuensinya, dan masa pakai kode yang dikirimkan. Kami tidak akan menganalisis semua contoh ini; persyaratan keamanan bersifat individual untuk setiap proyek dan dapat mencakup banyak kondisi berbeda. Kami membatasi diri untuk memeriksa relevansi kode berdasarkan masa berlakunya.

code lifetime check

Mari kita gunakan blok Current date & time ini untuk mendapatkan waktu saat ini. Hubungkan ke parameter B dari blok Date & time difference . Kami akan menggunakan bidang UpdatedAt dari model twofa sebagai parameter A .

Hasilnya, kami mendapatkan Time span - perbedaan antara dua titik waktu. Tetap hanya untuk memeriksa apakah perbedaan ini melebihi nilai tertentu yang dipilih. Dalam contoh kita, ini adalah 5 menit, yang akan kita tetapkan sebagai nilai statis B dari blok Greater .

time span value

Blok If-Else akan menggunakan hasil perbandingan untuk memandu proses lebih lanjut. Jika True (selisih melebihi 5 menit), proses akan kembali ke langkah pengiriman surat; pengguna akan menerima kode yang diperbarui. Dalam kasus False (kode masih baru dan terbaru), dimungkinkan untuk melanjutkan untuk memeriksa kode ini.

Tinjauan kode

Tahap akhir otentikasi adalah memeriksa kode yang diterima.

code check

Blok Equal harus memvalidasi bahwa kode yang dikirimkan oleh pengguna cocok dengan kode yang disimpan dalam model twofa yang terkait dengan pengguna. Jika ini tidak terjadi dan kode salah ditentukan ( If-Else -> False ), maka Anda perlu menampilkan pesan kesalahan ( Raise Error , Message = Code is wrong ). Jika perbandingan mengkonfirmasi kecocokan, Anda dapat melanjutkan ke tahap otentikasi akhir.

Untuk melakukan ini, kami menggunakan blok Auth: Authentication dan mendapatkan informasi tentang pengguna dengan token otorisasinya. Kami meneruskannya ke blok End sebagai hasil otentikasi yang berhasil.

Membuat titik akhir

Proses bisnis telah dibuat tetapi belum tersedia untuk digunakan. Anda perlu membuat titik akhir yang akan menjalankan proses bisnis ini.

2fa endpoint

Solusi yang masuk akal adalah dengan menggunakan titik akhir otentikasi default ( POST /Auth ). Cukup dengan mengganti proses bisnisnya dan menginstal yang baru saja dibuat. Dengan demikian, otentikasi sederhana akan dinonaktifkan, dan otentikasi dua faktor akan digunakan sebagai gantinya.

Publikasi dan pengujian

Ini melengkapi pembuatan otentikasi dua faktor. Anda dapat mempublikasikan hasilnya dan memeriksanya dalam tindakan. Untuk ini, lebih mudah menggunakan Swagger , yang dapat diakses dengan mengklik nama rencana Deploy di bagian Project API dari tombol Preview .

project API

Tetap hanya untuk menemukan titik akhir yang diinginkan dalam daftar, masukkan data pengguna dan mulai eksekusi dengan tombol Execute . Jika ada kesalahan yang ditemukan selama pengujian, kembali ke proses bisnis dan buat perubahan yang diperlukan.

Swagger

Was this article helpful?

AppMaster.io 101 Kursus kilat

10 Modul
2 Minggu

Tidak yakin harus mulai dari mana? Mulailah dengan kursus kilat kami untuk pemula dan jelajahi AppMaster dari A sampai Z.

Mulai Kursus
Development it’s so easy with AppMaster!

Butuh lebih banyak bantuan?

Selesaikan masalah apa pun dengan bantuan para ahli kami. Hemat waktu dan fokus untuk membangun aplikasi Anda.

headphones

Hubungi dukungan

Beritahu kami tentang masalah Anda, dan kami akan menemukan solusi untuk Anda.

message

Obrolan Komunitas

Diskusikan pertanyaan dengan pengguna lain di obrolan kami.

Bergabunglah dengan komunitas