Để tự động xác minh số điện thoại, bạn phải triển khai cả phần ứng dụng và máy chủ trong 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 qua điện thoại chịu trách nhiệm về ba tác vụ:
- Tạo một thông báo xác minh bao gồm mã một lần và có định dạng mà API Thu thập SMS phía máy khách dự kiến
- Đang gửi tin nhắn xác minh đến thiết bị của người dùng
- Xác minh mã một lần khi mã được gửi lại máy chủ và hoàn thành mọi công việc sau khi xác minh mà phần phụ trợ của bạn yêu cầu
Thông tin cụ thể về cách ứng dụng tương tác với máy chủ là do bạn quyết định. Một phương pháp phổ biến 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 nhất định và gửi tin nhắn xác minh qua SMS, điểm cuối thứ hai nhận mã một lần qua ứng dụng của bạn.
1. Tạo thông báo xác minh
Khi máy chủ 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 đến thiết bị của người dùng. Thông báo này phải:
- Không được quá 140 byte
- Chứa mã một lần mà ứng dụng gửi lại cho máy chủ của bạn để hoàn tất quy trình xác minh (xem Tạo mã một lần)
- Bao gồm một chuỗi băm gồm 11 ký tự để xác định ứng dụng của bạn (xem phần Tính toán chuỗi băm của ứng dụng)
Nếu không, nội dung của thông báo xác minh có thể là nội dung bạn chọn. Bạn nên tạo một thông báo để có thể dễ dàng trích xuất mã một lần sau này. Chẳng hạn, thông báo xác minh hợp lệ có thể có dạng như sau:
Your ExampleApp code is: 123ABC78FA+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à mã không thể kết nối và bạn có thể liên kết mã với người dùng hoặc số điện thoại khi ứng dụng khách gửi lại mã đến máy chủ của bạn. Bạn nên tạo mã dễ nhập để đáp ứng 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ã một lần là tạo số ngẫu nhiên mà bạn sử dụng làm khoá trong bảng cơ sở dữ liệu. Chẳng hạn, bạn có thể có một bảng PendingVerifications như sau:
Indonesia | Người dùng | Thời hạn |
---|---|---|
123456789... | 1234 | 14/3/2017 1:59 |
Bạn có thể sử dụng mã được mã hoá base32 làm mã một lần.
Tính toán chuỗi băm của ứng dụng
Dịch vụ Google Play sử dụng chuỗi băm để xác định thông báo xác minh nào cần gửi đến ứng dụng của bạn. Chuỗi băm được tạo bằng tên gói của ứng dụng và chứng chỉ khóa công khai của ứng dụng. Cách tạo chuỗi hàm băm:
Nếu bạn sử dụng tính năng ký ứng dụng của Google Play, hãy tải chứng chỉ ký ứng dụng xuống (
deployment_cert.der
) trong phần Tính năng ký ứng dụng của bảng điều khiển của Google Play.Sau đó, hãy nhập chứng chỉ ký ứng dụng vào kho lưu trữ khoá tạm thời:
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
Nếu bạn ký trực tiếp APK, hãy bỏ qua bước này.
Lấy chứng chỉ ký ứng dụng (chứng chỉ bạn đã nhập ở trên hoặc chứng chỉ bạn sử dụng để ký trực tiếp APK) dưới dạng chuỗi hex chữ thường.
Ví dụ: để lấy chuỗi hex từ kho khoá tạm thời được 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ý trực tiếp APK, hãy chỉ định kho khoá sản xuất và bí danh chứng chỉ của bạn.
Nếu bạn đã tạo một kho khoá tạm thời, hãy xoá kho khoá đó.
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 cách.
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 khỏi chuỗi trước khi tính tổng SHA-256.
Base64 mã hoá giá trị nhị phân của tổng SHA-256. Trước tiên, bạn có thể cần phải giải mã tổng SHA-256 khỏi định dạng đầu ra.
Chuỗi băm của ứng dụng là 11 ký tự đầu tiên của hàm băm được mã hóa base64.
Lệnh sau đây tính chuỗi chuỗi băm từ kho khóa sản xuất của ứng dụng:
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 lớp AppSignatureHelper từ ứng dụng mẫu truy xuất SMS. Tuy nhiên, nếu bạn sử dụng lớp trình trợ giúp, hãy nhớ xoá lớp đó khỏi ứng dụng sau khi nhận được chuỗi băm. Không sử dụng chuỗi băm được tính độ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 tin nhắn SMS
Sau khi bạn tạo tin nhắn xác minh, hãy gửi tin nhắn tới số điện thoại của người dùng bằng hệ thống SMS bất kỳ.
Ví dụ: xem 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 thông báo này, thông báo sẽ được chuyển đến ứng dụng của bạn. Ứng dụng sẽ trích xuất mã một lần rồi gửi lại máy chủ đó để hoàn tất quy trình xác minh.
3. Xác minh mã một lần khi trả lại mã
Máy chủ xác minh số điện thoại thường có một điểm cuối thứ hai dùng để nhận lại mã một lần từ các ứng dụng khách. Khi máy chủ của bạn nhận được mã một lần từ ứng dụng tại điểm cuối này, hãy làm như sau:
- Xác minh rằng mã một lần hợp lệ và chưa hết hạn.
- 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 quá trình xác minh số điện thoại.
- Xoá bản ghi cơ sở dữ liệu của mã một lần hoặc bằng cách nào khác, đảm bảo rằng bạn không thể sử dụng lại cùng một 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, quá trình xác minh sẽ hoàn tất.