Thực hiện Xác minh SMS trên máy chủ

Để tự động xác minh số điện thoại, bạn phải triển khai cả ứng dụng và của quy trình xác minh. Tài liệu này mô tả cách triển khai phần máy chủ.

Máy chủ xác minh điện thoại chịu trách nhiệm 3 tác vụ:

  1. Tạo thông báo xác minh bao gồm mã một lần và có định dạng mà SMS Retriever API phía máy khách yêu cầu
  2. Gửi tin nhắn xác minh đến thiết bị của người dùng
  3. Xác minh mã một lần khi mã được gửi trở lại máy chủ và hoàn tất mọi công việc sau khi xác minh mà chương trình phụ trợ của bạn yêu cầu

Chi tiết cụ thể về cách ứng dụng của bạn tương tác với máy chủ là tuỳ thuộc vào bạn. Điểm chung Phương pháp này là hiển thị một API REST với hai điểm cuối: một điểm cuối nhận yêu cầu xác minh một số điện thoại cụ thể rồi gửi tin nhắn xác minh qua SMS cũng như điểm cuối thứ hai nhận mã một lần từ ứng dụng của bạn.

1. Tạo thông báo xác minh

Khi máy chủ của bạn nhận được yêu cầu xác minh số điện thoại, trước tiên hãy tạo thông báo xác minh mà bạn sẽ gửi tới thiết bị của người dùng. Tin nhắn này phải:

Nếu không, nội dung của thông báo xác minh có thể là bất kỳ nội dung nào bạn chọn. Việc tạo thư này rất hữu ích để bạn có thể dễ dàng trích xuất tài liệu một lần mã vào lúc khác. Ví dụ: một thông báo xác minh hợp lệ có thể có dạng như sau:

Your ExampleApp code is: 123ABC78

FA+9qCX9VSu

Tạo mã một lần

Bạn có thể triển khai mã một lần theo nhiều cách, miễn là các mã đó không thể đoán được và bạn có thể liên kết các mã đó với người dùng hoặc số điện thoại khi khách hàng sẽ gửi chúng trở lại máy chủ của bạn. Bạn nên tạo mã dễ nhập để phù hợp với mọi tình huống có thể yêu cầu người dùng nhập mã theo cách thủ công.

Một cách để triển khai mã dùng một lần là tạo các số ngẫu nhiên mà bạn dùng dưới dạng khoá trong bảng cơ sở dữ liệu. Ví dụ: bạn có thể có một bảng như sau:

Mã nhận dạng Người dùng Hết hạn
123456789... 1234 2017-3-14 1:59

Bạn có thể sử dụng mã nhận dạng được mã hoá base32 dưới dạng mã dùng một lần.

Tính toán chuỗi hàm băm của ứng dụng

Dịch vụ Google Play sử dụng chuỗi hàm băm để xác định yêu cầu xác minh nào tin nhắn cần gửi đến ứng dụng của bạn. Chuỗi hàm băm được tạo từ tên gói của ứng dụng và chứng chỉ khoá công khai của ứng dụng. Cách tạo chuỗi hàm băm:

  1. Nếu bạn sử dụng tính năng ký ứng dụng của Google Play, tải chứng chỉ ký ứng dụng của bạn (deployment_cert.der) xuống từ Phần Ký ứng dụng của Google Play Console.

    Sau đó, nhập chứng chỉ ký ứng dụng vào kho khoá tạm thời:

    keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
    

    Nếu bạn ký APK trực tiếp, hãy bỏ qua bước này.

  2. Lấy chứng chỉ ký ứng dụng của bạn (chứng chỉ mà bạn đã nhập ở trên hoặc ký tự mà bạn sử dụng để ký trực tiếp APK của mình—dưới dạng chuỗi hex viết thường.

    Ví dụ: để lấy chuỗi hex từ kho khoá tạm thời đã tạo ở trên, hãy nhập lệnh sau:

    keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
    

    Nếu bạn ký APK trực tiếp, hãy chỉ định kho khoá sản xuất và bí danh chứng chỉ.

  3. Nếu bạn đã tạo kho khoá tạm thời, hãy xoá kho khoá đó.

  4. Nối chuỗi hex vào tên gói của ứng dụng, phân tách bằng một dấu .

  5. Tính tổng SHA-256 của chuỗi kết hợp. Hãy nhớ xoá mọi khoảng trắng ở đầu hoặc ở cuối chuỗi trước khi tính toán SHA-256 tổng.

  6. Base64-mã hoá giá trị nhị phân của tổng SHA-256. Bạn có thể cần phải giải mã tổng SHA-256 từ định dạng đầu ra trước.

  7. Chuỗi hàm băm của ứng dụng là 11 ký tự đầu tiên của chuỗi được mã hoá base64 hàm băm.

Lệnh sau đây tính toán chuỗi băm từ quá trình phát hành chính thức của ứng dụng kho khoá:

keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

Ngoài ra, bạn có thể lấy chuỗi hàm băm của ứng dụng bằng AppSignatureHelper từ ứng dụng mẫu SMS retriever. Tuy nhiên, nếu bạn dùng lớp trợ giúp, hãy nhớ xoá hàm đó khỏi ứng dụng của bạn sau khi nhận được chuỗi hàm băm. Không sử dụng chuỗi băm được tính toán một cách linh động trên ứng dụng trong thông báo xác minh của bạn.

2. Gửi tin nhắn xác minh qua SMS

Sau khi bạn tạo thông báo xác minh, hãy gửi thông báo đến số điện thoại bằng bất kỳ hệ thống SMS nào.

Ví dụ: xem bài viết Xác minh ứng dụng bằng Twilio SMS trên trang web dành cho nhà phát triển của Twilio.

Khi thiết bị của người dùng nhận được tin nhắn này, tin nhắn sẽ được chuyển đến . Ứng dụng của bạn trích xuất mã một lần và gửi lại mã này cho máy chủ của bạn để hoàn tất quy trình xác minh.

3. Xác minh mã một lần khi mã được trả về

Máy chủ xác minh số điện thoại thường có điểm cuối thứ hai để sử dụng để nhận lại mã một lần từ ứng dụng khách. Khi máy chủ của bạn nhận được một mã một lần từ ứng dụng của bạn tại điểm cuối này, hãy làm như sau:

  1. Xác minh rằng mã dùng một lần là hợp lệ và chưa hết hạn.
  2. Ghi lại rằng người dùng được liên kết với mã một lần đã hoàn tất số điện thoại xác minh.
  3. Xoá bản ghi cơ sở dữ liệu của mã dùng một lần, hoặc theo một cách khác để đảm bảo rằng bạn sẽ không thể sử dụng lại mã đó.

Khi bạn ghi lại trạng thái xác minh của người dùng và xoá mã một lần khỏi cơ sở dữ liệu của bạn, việc xác minh đã hoàn tất.