Xác thực hai yếu tố có vẻ như là một quy trình rất tầm thường đối với người dùng. Nhiều người từ lâu đã quen với việc khi sử dụng nhiều ứng dụng, việc nhập tổ hợp mật khẩu và đăng nhập quen thuộc là chưa đủ. Một yếu tố xác minh bổ sung được giới thiệu để tăng cường bảo mật và ngăn chặn truy cập trái phép. Trong hầu hết các trường hợp, đó là một mã duy nhất có thể nhận được qua e-mail hoặc SMS.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách bạn có thể triển khai xác thực hai yếu tố trong AppMaster . Ví dụ, gửi mã vào thư sẽ được sử dụng. Chúng tôi sẽ phân tích những mô-đun nào cần được kết nối, cài đặt nào cần thực hiện, quy trình kinh doanh nào cần tạo và cách kiểm tra kết quả hoàn thành trong thực tế.

Đầu tiên, chúng ta hãy nhìn vào kế hoạch chung. Những bước cần phải được thực hiện trong quá trình kinh doanh của chúng tôi?

  1. Xác minh đăng nhập (đảm bảo người dùng đã thực sự đăng ký).
  2. Kiểm tra xem mật khẩu có đúng không.
  3. Gửi mã xác nhận qua thư hoặc SMS.
  4. Kiểm tra sự liên quan của mã.
  5. Kiểm tra tính chính xác của mã.
  6. Hoàn thành xác thực.

Giai đoạn chuẩn bị

Ngay cả trước khi bạn bắt đầu thiết kế xác thực hai yếu tố, ở giai đoạn đăng ký người dùng, bạn cần đảm bảo rằng:

  • Dữ liệu người dùng phải chứa một e-mail. Nó sẽ được sử dụng để gửi mã xác minh. E-mail thường được sử dụng làm thông tin đăng nhập và chúng ta sẽ chỉ xem xét một ví dụ như vậy.
  • Đăng nhập là duy nhất. Hai người dùng khác nhau có cùng thông tin đăng nhập không thể tồn tại trong hệ thống.

Để thuận tiện cho việc giải quyết các tác vụ này (và nhiều tác vụ khác), mô-đun AppMaster Auth Nó chứa các mô hình cơ sở dữ liệu cần thiết, khối quy trình nghiệp vụ và điểm cuối để sử dụng.

auth module

xác minh đăng nhập

Đăng nhập, mật khẩu và mã xác minh được sử dụng làm thông số đầu vào của quy trình nghiệp vụ. Nhưng ở giai đoạn đầu tiên, chúng tôi chỉ cần đăng nhập. Nó sẽ giúp đảm bảo rằng người dùng này tồn tại. Anh ta đã được đăng ký và thông tin về anh ta được lưu trữ trong cơ sở dữ liệu.

user check

Để làm điều này, khối DB: Search User tìm kiếm người dùng có thông tin đăng nhập đã cho trong cơ sở dữ liệu. Đảm bảo đặt tham số SearchExact = True để tìm kiếm kết quả khớp chính xác.

Dữ liệu nhận được được chuyển đến khối Array Element có chỉ số 0 (việc đếm bắt đầu từ số 0 và giá trị duy nhất được tìm thấy sẽ luôn tương ứng với chỉ số 0 trong mảng).

Khối Is Null kiểm tra xem người dùng có thực sự được tìm thấy hay không. Và tùy thuộc vào kết quả ( True/False ), khối If-Else sẽ làm gián đoạn quy trình kinh doanh bằng một thông báo lỗi ( Raise Error block) hoặc chỉ đạo nó đi xa hơn.

Kiểm tra mật khẩu

Ở giai đoạn này, bạn cần đảm bảo rằng mật khẩu người dùng được nhập chính xác.

password check

Và ở đây, điều cần thiết là phải hiểu rằng mật khẩu không được lưu trữ rõ ràng trong cơ sở dữ liệu. Hàm Bcrypt băm chúng và chỉ hàm băm kết quả được lưu trữ trong cơ sở dữ liệu. Do đó, ngay cả khi chúng tôi cho rằng sẽ xảy ra rò rỉ dữ liệu, những kẻ tấn công vẫn không thể tìm thấy mật khẩu của người dùng; chúng được mã hóa an toàn.

Vì lý do này, bạn không thể chỉ lấy mật khẩu từ cơ sở dữ liệu và so sánh nó với mật khẩu đã nhập. Bạn cần lấy mã băm của mật khẩu và sử dụng nó để so sánh. Để giải quyết vấn đề này, khối Auth: Probe Password được sử dụng. Là tham số đầu vào, nó lấy mật khẩu do người dùng nhập ( password ) và hàm băm của mật khẩu được lưu trữ trong cơ sở dữ liệu ( hashed_password ) và chuyển đổi nó thành kiểu dữ liệu String (khối To String ).

Tùy thuộc vào kết quả, như trong bước trước, sử dụng khối If-Else , chúng tôi sẽ hiển thị thông báo lỗi ( Raise Error , Message = Password is wrong ) hoặc chuyển quá trình sang giai đoạn tiếp theo.

Tiện ích mở rộng mô hình người dùng

Đối với bước tiếp theo, bạn cần thực hiện một thay đổi nhỏ trong mô hình người dùng và thêm thông tin về mã cần được xác nhận.

Nói chung, mô hình User ban đầu chứa các trường có thể được sử dụng cho tác vụ này - Confirmed, Confirmation code, Confirmation code expires at . Nhưng trong ví dụ này, chúng tôi sẽ giả định rằng các trường này chỉ được sử dụng để đăng ký và xác minh tài khoản ban đầu.

Để quy trình rõ ràng hơn, hãy tạo một mô hình twofa ( two-factor authentication ) riêng biệt, liên kết mô hình User với nó (mối quan hệ 1-1, has one ) và thêm một trường - code ( Loại String ).

user model

Chuẩn bị gửi email

Để gửi e-mail có mã xác nhận, người ta nên chuẩn bị sơ bộ. Một trong những tùy chọn dễ tiếp cận nhất là sử dụng mô-đun Custom SMTP mà bạn cần cài đặt và định cấu hình.

custom SMTP module

Khi sử dụng Gmail , hầu hết các cài đặt đã được đặt theo mặc định và bạn cần thêm tên người dùng và mật khẩu của mình. Khi sử dụng các máy chủ thư khác, sẽ hữu ích nếu bạn tham khảo tài liệu của họ để lấy dữ liệu cần thiết.

Trong trường hợp này, bạn có thể cần thay đổi một chút cài đặt bảo mật của máy chủ thư. Ví dụ: theo mặc định, Gmail có thể chặn các kết nối sử dụng ứng dụng của bên thứ ba và bạn cần xóa hạn chế này trong phần cài đặt.

Đang gửi mã xác minh

Chúng tôi đã kiểm tra thông tin đăng nhập và mật khẩu và hoàn thành tất cả các bước chuẩn bị cần thiết, vì vậy bây giờ bạn có thể tiến hành gửi thư có mã xác nhận.

send email

Khối Custom SMTP: Send Email sử dụng một mảng địa chỉ làm đích. Do đó, mặc dù bạn chỉ cần gửi một bức thư đến một địa chỉ, nhưng nó nên được thêm vào mảng. Đối với điều này, khối Append Array được sử dụng.

Bước tiếp theo là tạo mã xác minh. Khối Random string phù hợp cho việc này. Chúng tôi sẽ gửi một mã bao gồm 6 số ngẫu nhiên và thực hiện các cài đặt phù hợp. Length = 6, With 0-9 = True , tất cả các tham số khác = False .

Tiếp theo, bạn cần tạo văn bản của bức thư. Để thực hiện việc này, hãy sử dụng khối Concat Strings để thêm văn bản giải thích vào mã được tạo ( First = Verification code: ), chuyển đổi kết quả thành kiểu dữ liệu Text ( To Text body ) và kết nối kết quả với tham số nội dung của email khối gửi.

Đối với lần gửi cuối cùng, chỉ cần chỉ định chủ đề của bức thư ( subject ) và người gửi ( from_name ).

Nhưng chỉ gửi mã thôi là chưa đủ; nó cũng phải được lưu trữ trong dữ liệu của người dùng. Rốt cuộc, bạn cần xác minh tính chính xác của nó khi người dùng nhận được mã và gửi lại để xác nhận.

save twofa

Để làm điều này, chúng tôi sẽ sử dụng mô hình twofa mà chúng tôi đã tạo ra một cách thận trọng trước đó. Nếu đây là lần gửi mã đầu tiên, bạn phải tạo mã với thông tin về người dùng của mã đó. Trong trường hợp sử dụng lại, cần phải vá mục hiện có, cho biết ID và mã mới của mục đó.

Bước cuối cùng của giai đoạn là sử dụng khối Raise Error để trả về thông báo về việc gửi mã tới e-mail.

Kiểm tra mức độ liên quan của mã

Cần quan tâm đến bảo mật bổ sung và bảo vệ mã khỏi một bảng liệt kê tầm thường. Sẽ là khôn ngoan nếu giới hạn số lần thử nhập, tần suất của chúng và thời gian tồn tại của mã đã gửi. Chúng tôi sẽ không phân tích tất cả các ví dụ này; yêu cầu bảo mật là riêng cho từng dự án và có thể bao gồm nhiều điều kiện khác nhau. Chúng tôi hạn chế kiểm tra mức độ liên quan của mã theo thời hạn hiệu lực của nó.

code lifetime check

Hãy sử dụng khối Current date & time để lấy thời gian hiện tại. Kết nối nó với tham số B của khối Date & time difference Giờ. Chúng tôi sẽ sử dụng trường twofa UpdatedAt tham số A .

Kết quả là, chúng tôi nhận được Time span - sự khác biệt giữa hai điểm thời gian. Nó chỉ còn lại để kiểm tra xem sự khác biệt này có vượt quá một giá trị đã chọn nhất định hay không. Trong ví dụ của chúng tôi, đây là 5 phút, chúng tôi sẽ đặt làm giá trị tĩnh B của khối Greater .

time span value

Khối If-Else sẽ sử dụng kết quả so sánh để hướng dẫn thêm quy trình. Nếu True (chênh lệch quá 5 phút), quy trình sẽ quay lại bước gửi thư; người dùng sẽ nhận được một mã cập nhật. Trong trường hợp False (mã mới và cập nhật), có thể tiến hành kiểm tra mã này.

đánh giá mã

Giai đoạn xác thực cuối cùng là kiểm tra mã nhận được.

code check

Khối Equal phải xác thực rằng mã do người dùng truyền vào khớp với mã được lưu trữ trong mô hình twofa liên kết với người dùng. Nếu đây không phải là trường hợp và mã được chỉ định không chính xác ( If-Else -> False ), thì bạn cần hiển thị thông báo lỗi ( Raise Error , Message = Code is wrong false ). Nếu so sánh xác nhận trùng khớp, bạn có thể chuyển sang giai đoạn xác thực cuối cùng.

Để thực hiện việc này, chúng tôi sử dụng khối Auth: Authentication và nhận thông tin về người dùng bằng mã thông báo ủy quyền của anh ấy. Chúng tôi chuyển chúng đến khối End do xác thực thành công.

Tạo điểm cuối

Quy trình kinh doanh đã được tạo nhưng chưa có sẵn để sử dụng. Bạn cần tạo một điểm cuối sẽ chạy quy trình kinh doanh này.

2fa endpoint

Một giải pháp hợp lý sẽ là sử dụng điểm cuối xác thực mặc định ( POST /Auth ). Nó sẽ đủ để thay thế quy trình kinh doanh của nó và cài đặt quy trình vừa được tạo. Do đó, xác thực đơn giản sẽ bị tắt và thay vào đó, xác thực hai yếu tố sẽ được sử dụng.

Công bố và thử nghiệm

Điều này hoàn thành việc tạo xác thực hai yếu tố. Bạn có thể xuất bản kết quả và kiểm tra nó trong thực tế. Đối với điều này, thật thuận tiện khi sử dụng Swagger , có thể truy cập bằng cách nhấp vào tên của kế hoạch Triển khai trong phần Project API của nút Preview .

project API

Nó chỉ còn lại để tìm điểm cuối mong muốn trong danh sách, nhập dữ liệu người dùng và bắt đầu thực hiện bằng nút Execute . Nếu phát hiện thấy bất kỳ lỗi nào trong quá trình thử nghiệm, thì hãy quay lại quy trình kinh doanh và thực hiện các thay đổi cần thiết.

Swagger

Was this article helpful?

AppMaster.io 101 Khóa học tai nạn

10 Mô-đun
2 Tuần

Không biết chắc nên bắt đầu từ đâu? Bắt đầu với khóa học sụp đổ của chúng tôi dành cho người mới bắt đầu và khám phá AppMaster từ A đến Z.

Bắt đầu khóa học
Development it’s so easy with AppMaster!

Cần sự giúp đỡ nhiều hơn?

Giải quyết mọi vấn đề với sự giúp đỡ của các chuyên gia của chúng tôi. Tiết kiệm thời gian và tập trung vào việc xây dựng các ứng dụng của bạn.

headphones

Liên hệ hỗ trợ

Hãy cho chúng tôi biết về vấn đề của bạn và chúng tôi sẽ tìm ra giải pháp cho bạn.

message

trò chuyện cộng đồng

Thảo luận câu hỏi với những người dùng khác trong cuộc trò chuyện của chúng tôi.

Tham gia cộng đồng