SuperAPI AI 工具集

sumsub-integrate-dint-websdk

安全与审计

查看项目

更新于 10-15 16:26

技能介绍

用途

本技能用于为已经通过 Sumsub WebSDK 验证用户的 Web 项目添加设备智能(Device Intelligence,简称 DI,即 Fisherman 模块)。DI 是欺诈检测层,负责采集底层设备与浏览器信号(设备指纹、机器人/自动化、VPN/代理、模拟器、无痕模式、设备复用等),并将这些信号作为设备风险标签附加到申请人上,供风险评分使用。

执行采集的 JS 模块名为 Fisherman(npm 包 @sumsub/fisherman),与设备智能是同一事物的不同名称。在 WebSDK 内部通常无需直接接触它,SDK 会自带并驱动它。

主要能力

  • 在验证级别设置中启用“Capture device data”后,WebSDK 2.0 与移动 SDK 会自动携带设备智能能力。
  • WebSDK 使用与基础集成相同的访问令牌,自动初始化 Fisherman、在每次步骤切换时对设备进行指纹采集,并绑定到当前(applicantId, attemptId)。
  • 在级别切换(attemptId 变化)时重新初始化,使多级别流程中每个级别获得新的设备绑定。
  • 将生成的设备 id 转发到后端,使采集结果与申请人关联。
  • 支持可选 BYOK:在 DevSpace → Integrations → Fingerprint 中提供自己的 Fingerprint Pro 凭据(公钥 + 密钥 API key),使设备在自有 Fingerprint 账户下采集;不提供则使用 Sumsub 自有凭据。
  • 设备风险标签会落在申请人上,可通过仪表盘(申请人资料 → Devices 标签页、已完成验证 → Device Check 区块、Transactions → 设备行 → View device details)或服务端 API 读取。

使用方式

阶段 1:在级别上启用设备采集

在仪表盘中打开验证级别 → Device intelligence 区块 → 勾选 Capture device data。若看不到该设置,说明工作区尚未开通 DI,需联系 Sumsub 启用。这是全部必需设置,重新启动现有 WebSDK 流程后设备即开始被采集。

阶段 2:SDK 内自动生命周期(无需代码)

启用后,WebSDK 使用现有令牌端点签发的同一访问令牌自动完成:初始化 Fisherman、在步骤切换时指纹采集并绑定到(applicantId, attemptId)、在级别切换时重新初始化、将设备 id 转发到后端。无需编写、配置或调用任何内容。可在日志/网络流量中识别相关请求(/di/info、/bhv/... 事件 POST、X-External-Device-Fingerprint 请求头)。

阶段 3:高级——自渲染/无头接线

仅在不使用预构建 snsWebSdk 组件、自行驱动验证 API 时需要。此时需自行管理 Fisherman 生命周期,镜像 SDK 行为:

// 仅示意形状——完整实现见 examples/fisherman-self-render.ts
import { init, destroy, type Fisherman } from '@sumsub/fisherman'

let fisherman: Fisherman | undefined // 模块级单例

// 使用 SDK 访问令牌 + 区域 API 主机初始化一次
fisherman = await init({ token, baseUrl, onError: () => { destroy() /* 令牌刷新后重新初始化 */ } })

// 每次步骤切换——先判断门控,再按 (applicantId, attemptId) 绑定进行指纹采集
if (fisherman?.isDeviceIntelligenceEnabled) {
  const { visitorId } = await fisherman.fingerprint({
    linkedId: applicantId,
    deviceBindingId: `${applicantId}-${attemptId}`, // 必须随级别变化
  })
  // 将 visitorId 作为 X-External-Device-Fingerprint 头转发到后续 API 调用
}

关键规则:

  • 双层门控:SDK 在配置级标志 config.deviceIntelligenceSettings.enabled 为 false 时不调用 init();在运行时标志 fisherman.isDeviceIntelligenceEnabled(来自 /di/info)为 true 前不执行 fingerprint()。需同时镜像这两层。
  • 级别切换(attemptId 变化)时,先 destroy() 再 init(),然后才进行下一次 fingerprint()。
  • 将返回的 visitorId 作为 X-External-Device-Fingerprint 头转发到采集后的验证 API 调用。该头是设备/统计增强,实际申请人绑定是上面的按尝试 deviceBindingId(applicantId-attemptId),而非该头。

阶段 4:读取设备信号

DI 不改变读取判定结果的方式,只是丰富它。保持服务端为唯一事实来源(webhook + 已认证的申请人 GET),并同时读取设备数据。设备风险标签落在申请人上,不在 webhook 载荷中。applicantReviewed webhook 仅携带判定结果(reviewResult),应将其作为服务端读取申请人的触发器(使用与基础技能相同的 App-Token + HMAC 认证),按 externalUserId 查询:

USER_ID="<your-externalUserId>"   # 若使用 Sumsub 申请人 id:/resources/applicants/<applicantId>/one
PATH_Q="/resources/applicants/-;externalUserId=${USER_ID}/one"
TS=$(date -u +%s)
SIG=$(printf '%s%s%s' "$TS" "GET" "$PATH_Q" \
      | openssl dgst -sha256 -hmac "$SUMSUB_SECRET_KEY" -hex | awk '{print $NF}')
curl -sS --fail-with-body -H "X-App-Token: $SUMSUB_APP_TOKEN" -H "X-App-Access-Ts: $TS" \
     -H "X-App-Access-Sig: $SIG" -H "X-Agent-Source: sumsub-skills" \
     -H "X-Agent-Source-Ver: 1.5.0" \
     "https://api.sumsub.com${PATH_Q}"

可运行版本见 examples/read-device-results.sh。完整的设备信号/风险标签目录及其出现位置见 references/device-signals.md。

适用场景

  • 已使用 Sumsub WebSDK 验证用户,希望在不改动前端代码的前提下增加设备欺诈检测。
  • 需要采集设备指纹、识别机器人/自动化、VPN/代理、模拟器、无痕模式、设备复用等风险信号。
  • 需要将设备风险标签纳入风险评分或访问门控决策。
  • 自渲染/无头集成场景下需要自行管理 Fisherman 生命周期。

限制与注意事项

  • 仅使用沙箱令牌:集成期间不得接受或使用生产 App Token/密钥。需从 https://cockpit.sumsub.com/checkus/home?sbx=true 获取沙箱令牌对(Connect Sumsub to your AI agent → Build & configure → Generate token),令牌与密钥仅在创建时显示一次,关闭对话框前需复制两者。
  • 沙箱没有真实设备信号,Fingerprint 为模拟;设备仍会被采集、风险标签仍会出现,但值为合成数据。
  • 确定性测试结果可通过在 init 时传入 simulationConfig(FpSimulationConf)强制特定信号,仅适用于自渲染路径;预构建 WebSDK 自行处理沙箱模拟。
  • “Capture device data”是按级别、按工作区设置的,沙箱中启用不会延续到生产。
  • 若基于设备风险进行访问门控,需自行决定哪些标签为阻断性、哪些为信息性(见 references/device-signals.md)。
  • 若使用 BYOK Fingerprint 密钥,生产工作区需使用生产密钥,沙箱仅使用沙箱密钥。
  • 自渲染路径需验证 isDeviceIntelligenceEnabled 门控、按 attemptId 重新初始化、X-External-Device-Fingerprint 转发均通过真实沙箱运行验证。

相关技能

  • sumsub-integrate-websdk:本技能所基于的基础 WebSDK 嵌入(令牌端点、生命周期、webhook)。
  • sumsub-integrate-dint-standalone:无 WebSDK 组件页面(登录/注册/结账)上的设备智能。
  • sumsub-api-auth:所有 Sumsub 技能共享的 HMAC 签名。
  • references/device-signals.md:设备风险标签及出现位置。
  • examples/fisherman-self-render.ts:高级无头接线。
  • examples/read-device-results.sh:服务端读取申请人(含设备风险标签)。
  • Device Intelligence 文档与 Get started:权威来源。