跳到主要内容

🙂 面部主动活体检测

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 后再继续开户流程。
}

网页

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 转发至您的后端进行验证。
}

会话的工作原理

  • 面部锁定 — 要求有且仅有一张正面人脸,尺寸足够大且居中,并在挑战开始前保持稳定。
  • 随机挑战动作 — 每次会话随机抽取 3 个不同的挑战动作;每个动作都以严格的判定条件验证(眨眼必须是先闭眼再睁眼的过渡,转头必须达到偏航角 ≥ 18° 并回到正中,微笑必须保持一段时间)。
  • 防作弊 — 面部丢失、第二张面部进入画面或面部身份切换会重新开始当前挑战;多次重启或超时将导致会话失败。
  • 最佳帧选择 — 会话期间每一帧清晰、正面、睁眼的画面都会被评分(拉普拉斯清晰度 × 面部尺寸);得分最高的一帧将作为自拍照提交至服务器。
  • 服务器签名判定 — finalize 端点校验挑战日志,对自拍照重新运行被动活体检测,并对判定结果签名。仅设备端的结果只能作为用户体验参考——请务必在您的后端验证签名
只信任签名判定

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

了解更多