跳到主要内容

🙂 人脸主动活体检测

SDK 为您运行完整的活体检测会话:它锁定用户面部,发布 3 个随机挑战(眨眼、向左转、向右转、微笑),通过设备上的面部地标进行实时验证,从整个会话中选择最清晰的正脸自拍照帧,并根据 人脸主动活体检测 API 进行最终确定 — 每个最终确定的会话收费 1 IC。服务器将重新验证自拍照,并返回您的后端可以独立验证的 HMAC-SHA256 签名结果

Flutter

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,然后继续进行注册。
}

Web

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 / Android / React Native

相同的流程在原生封装器中提供 — 一个引擎,相同的捕获质量。安装和相机权限设置:iOS, Android & React Native

// 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} />

会话工作原理

  • 面部锁定 — 要求正好一个正脸,面部要大且足够居中,并在挑战开始前保持稳定。
  • 随机挑战 — 每个会话随机抽取 3 个不同的挑战;每个挑战都通过严格的谓词进行验证(眨眼必须是闭眼然后睁眼的过渡,转头必须达到 ≥ 18° 的偏航角并返回中心,微笑必须保持)。
  • 防作弊 — 丢失面部、第二张人脸进入画面或人脸身份切换将重新开始当前挑战;重复的重新开始或超时将导致会话失败。
  • 最佳帧选择 — 对会话中的每一帧清晰、正面、睁眼的帧进行评分(拉普拉斯锐度 × 面部大小);最佳帧将成为提交给服务器的自拍照。
  • 服务器签名结果 — 最终确定端点将验证挑战日志,重新运行自拍照的被动活体检测,并对结果进行签名。仅设备上的结果仅供用户体验指导 — 始终在您的后端验证签名
仅信任签名结果

修改过的客户端可能会伪造设备上的挑战结果。您的后端必须重新计算 HMAC-SHA256(secret, canonicalJSON(verdict)) 并将其与 signature 进行比较,然后才能信任 verdict.passed。请参阅 签名验证示例

了解更多