主动人脸活体检测
SDK 在设备上运行三个随机挑战,再把最佳自拍发送给主动人脸活体检测 API,由其返回 HMAC-SHA256 签名的判定。每个完成的会话计费 1 IC。
调用
- Flutter
- Web
- iOS
- Android
- React Native
import 'package:iapp_ekyc_sdk/iapp_ekyc_sdk.dart';
final client = IappEkycClient(apiKey: 'YOUR_API_KEY');
final liveness = await ActiveLivenessView.start(context, client: client);
if (liveness.verdict.passed) {
// 将 liveness.verdict + liveness.signature 转发给您的后端,
// 在那里验证 HMAC,然后继续进行注册。
}
import { IappEkyc } from '@iapp-technology/ekyc-sdk';
const ekyc = new IappEkyc({ apiKey: 'YOUR_API_KEY' });
const liveness = await ekyc.startActiveLiveness({
mount: document.getElementById('ekyc-mount'),
});
if (liveness.verdict.passed) {
// 将 liveness.verdict + liveness.signature 转发给您的后端进行验证。
}
// iOS (Swift; 也支持 Objective-C)
let config = IappEkycConfig(apiKey: "YOUR_API_KEY", flow: .activeLiveness)
IappEkycSdk.present(from: self, config: config) { result in
// 在信任 `passed` 之前,在您的后端验证 verdictJSON + signature。
}
// Android (Kotlin; 也支持 Java)
ekyc.launch(IappEkycRequest.ActiveLiveness(config))
// React Native
<IappEkycFlow flow="activeLiveness" apiKey="YOUR_API_KEY"
onResult={handleResult} onError={handleError} onCancel={close} />
安装:Flutter 与 Web 见入门指南,原生封装与相机权限见 iOS, Android & React Native。
结果
结果包含服务器返回的 verdict 与 signature;设备上的结果仅用于界面提示。
只信任签名后的判定
被篡改的客户端可以伪造设备上的挑战结果。您的后端必须重新计算 HMAC-SHA256(secret, canonicalJSON(verdict)) 并与 signature 比较,然后才能信任 verdict.passed。参见签名验证示例。
会话如何运行
- 面部锁定:画面中恰好一张正脸,足够大且居中,并在挑战开始前保持稳定。
- 挑战:从眨眼、向左转、向右转、微笑中随机抽取三个不同的挑战。眨眼须先闭后睁,转头须达到至少 18° 偏航角并回到中间,微笑须保持。
- 重新开始:面部离开画面、出现第二张人脸或更换了人,当前挑战会重新开始;多次重新开始或超时则会话失败。
- 自拍:每一帧清晰、正面、睁眼的画面按清晰度与面部大小评分,最佳一帧发送给服务器。
- 判定:服务器校验挑战记录,对自拍重新运行被动活体检测,并对判定签名。
完整的活体检测规范见 SDK 源代码。