Quy trình tích hợp Biometric Authentication trên Zalo
Bắt đầu hỗ trợ ở phiên bản:
- API: 2.5.3
Với API version ﹤ 2.23.0, phải gọi api login trước khi gọi api này và cần xin cấp quyền tại trang Quản lý ứng dụng
Mô tả tính năng
Biometric Authentication (xác thực sinh trắc học) là tính năng dùng vân tay, khuôn mặt… để xác thực thông tin người sử dụng.
Hiện tại API Biometric đang trong quá trình thử nghiệm nên sẽ chỉ mở cho một số đối tác nhất định. Vì vậy để sử dụng tính năng này, vui lòng đăng ký với Mini App Team và gửi kèm các thông tin sau:
- Zalo App ID
- Mini App ID
- Webhook URL: url để nhận event khi xác thực thành công. Yêu cầu domain public và sử dụng HTTPS.
Sequence Diagram
Biểu đồ mô tả trình tự cơ bản quá trình xác thực với Biometric trên Zalo, với Mini App quy trình sẽ được tối giản và lược bỏ 1 số bước.
Các bước cơ bản để xác thực Biometric trên Mini App như sau:
- Kiểm tra trạng thái Biometric của thiết bị
- Sử dụng SDK mở UI xác thực Biometric
- Server xử lý sự kiện webhook - xác thực thành công
- Mini App sử dụng secret data xác thực lại với Server
Kiểm tra trạng thái Biometric của thiết bị
API checkStateBioAuthentication cho phép ứng dụng kiểm tra thông tin xác thực bằng sinh trắc học có bị thay đổi so với lần gần nhất không. Ví du: thêm vân tay, thêm FaceID, reset vân tay,... bạn cũng có thể dựa vào đó để biết thiết bị có hỗ trợ Biometric hay không?
Lưu ý, tính năng Biometric chỉ hỗ trợ các OS chuẩn, không bị Root hoặc Jailbreak.
Sample code
import api from "zmp-sdk";
api.checkStateBioAuthentication({
success: (data) => {
const { bioState } = data;
//Có hỗ trợ Biometric
},
fail: (err) => {
//Không hỗ trợ Biometric
},
});
Sử dụng SDK mở UI xác thực Biometric
Sử dụng function api.openBioAuthentication để mở UI xác thực với Biometric, tham số cần truyền:
Parameters
Object object
Property | Type | Default | Required | Description | Minimum Version |
---|---|---|---|---|---|
secretData | string | Khoá bí mật, dùng một lần cho quá trình xác thực. Bạn có thể tạo secretData = hash(accessToken + timestamp) | 2.5.3 | ||
ui | object | 2.5.3 | |||
requireFingerprint | boolean | Chỉ sử dụng vân tay. Hỗ trợ Android | 2.5.3 | ||
success | function | Callback function khi gọi api thành công | 2.5.3 | ||
fail | function | Callback function khi gọi api thất bại | 2.5.3 |
UI Object
Property | Type | Default | Required | Description | Minimum Version |
---|---|---|---|---|---|
title | string | "Xác thực" | Tiêu đề form xác thực | ||
subTitle | string | "Sử dụng sinh trắc học của bạn để xác thực" | Nội dung hướng dẫn | ||
negativeButtonText | string | "Đóng" | Tiêu đề của Button thoát |
Error code
Code | Error |
---|---|
108 | Xác thực quá nhiều lần => Đã bị khóa Biometic |
103 | Xác thực không thành công (Bấm nhập mật khẩu - iOS) |
102 | Hủy xác thực |
101 | Xác thực thất bại 3 lần (Android) |
100 | Unknown error |
Sample code
import api from "zmp-sdk";
api.openBioAuthentication({
secretData: "aGkgYmFu",
ui: {
title: "Biometric login for my app",
subTitle: "Log in using your biometric credential",
negativeButtonText: "Cancel",
},
success: (data) => {},
fail: (error) => {
const { code } = error;
//Mô tả code các mã lỗi
// -108: Xác thực quá nhiều lần => Đã bị khóa Biometic
// -103: Xác thực không thành công (Bấm nhập mật khẩu - iOS)
// -102: Hủy xác thực
// -101: Xác thực thất bại 3 lần (Android)
// -100: Unknown error
},
});
Server xử lý sự kiện webhook - xác thực thành công
Sau khi người dùng xác thực thành công, Zalo Server sẽ gửi event tới url bạn đã đăng ký
- URL: Webhook URL của ứng dụng
- Method: POST
- Headers: X-ZEvent-Signature (xem hướng dẫn verify signature bên dưới)
- Content-Type: application/json
Property | Type | Default | Required | Description | Minimum Version |
---|---|---|---|---|---|
secretData | String | "Xác thực" | 2.5.3 | ||
event | String | biometric.verify.success | Tên sự kiện | 2.5.3 | |
timestamp | Long | "Đóng" | Thời gian sự kiện | 2.5.3 |
Server của bạn tiến hành verify X-ZEvent-Signature theo hướng dẫn bên dưới. Sau đó lưu lại trạng thái xác thực Bio thành công cho secret_data vừa nhận được.
Hướng Dẫn Verify Signature
Để xác thực Signature của sự kiện vui lòng làm theo hướng dẫn sau:
- Lấy tất cả danh sách fields dữ liệu trong data bạn nhận được sắp theo thứ tự Alphabet (A - Z)
- Build chuỗi content các giá trị theo thứ tự fields vừa sắp xếp được
- Signature được tính theo hàm hash sha256(content + API Key). Vui lòng tham khảo code mẫu bên dưới. API Key sẽ do Team Mini App cung cấp.
Code mẫu build signature từ data:
var generateSignature = (data, apiKey) => {
const keys = Object.keys(data).sort();
let content = "";
for (let k of keys) {
let value = data[k];
if (typeof value == "object") {
value = JSON.stringify(value);
}
content += value;
}
const signature = crypto
.createHash("sha256")
.update(`${content}${apiKey}`)
.digest("hex");
return signature;
};
Mini App sử dụng secret data xác thực lại với Server
Sau khi có callback từ API openBioAuthentication, nếu thành công, bạn cần dùng secretData ở đã tạo ở bước trước để xác thực/login với Server của bạn.
Ví dụ hiện thực API xác thực tài khoản với Biometric
- URL: https://yourdomain/biometric/verify
- Method: POST
- Content-Type: application/json
Property | Type | Default | Required | Description | Minimum Version |
---|---|---|---|---|---|
secretData | String | 2.5.3 | |||
timestamp | Long | Thời gian sự kiện | 2.5.3 | ||
accessToken | String | Zalo Access Token để định danh tài khoản Zalo | 2.5.3 |