Skip to content

SDK 认证与 Token

原生与跨端访客 SDK 使用 visitor_token 认证。正式环境由宿主业务服务端签发 Token;客户端只负责通过 tokenProvider 获取并交给 SDK 使用。

正式环境流程

text
宿主 App 已登录用户

SDK 调用 tokenProvider

宿主 App 请求自己的业务后端

业务后端使用商户 apiKey 签发 visitor_token

SDK 调用 /sdk/visitor/*(Authorization: Bearer <visitor_token>)

apiKey 不得下发到公开客户端

商户 apiKey 是签名密钥。正式 App、小程序和 Web 前端必须使用 tokenProvider,不得把 apiKey 写进源码、配置文件或浏览器脚本。

Token 格式

visitor_token 为 HS256 三段式 JWT:

text
base64url(header) + "." + base64url(payload) + "." + base64url(signature)

Header 固定为:

json
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload 只包含以下字段:

json
{
  "bid": "<商户 ID>",
  "uid": "<宿主系统中的稳定访客 ID>",
  "exp": 1784000000
}
字段说明
bid商户 ID,必须为当前有效商户。
uid在同一商户下稳定唯一的访客 ID。
expUnix 秒级过期时间戳。

签名计算:

text
signature = HMAC_SHA256(base64url(header) + "." + base64url(payload), apiKey)

不要向 Payload 加入昵称、头像、属性、设备信息或其他自定义字段。访客资料由 SDK 的 VisitorProfile 同步,服务端只信任签名校验后的 biduidexp

各平台的 Token Provider

平台Provider 形式
Android Kotlinsuspend () -> String
iOS Swift() async throws -> String
FlutterFuture<String> Function()
React Native() => Promise<string>
uni-app() => Promise<string>

Token Provider 每次被调用时都应返回当前有效的 Token。SDK 会在首次业务请求、Token 距离过期不足 60 秒或服务端明确拒绝当前 Token 时自动刷新;并发请求会合并为一次 Provider 调用。

平台无关示例

text
Visitor.configure(
  config: { baseUrl: "https://<客服系统域名>" },
  auth: VisitorAuth.tokenProvider(() => appApi.fetchVisitorToken()),
  visitor: { nickname: "当前用户显示名" }
)

其中 appApi.fetchVisitorToken() 只能访问宿主自身的后端接口。SDK 不提供、也不需要单独的“登录 SDK”接口。

调试方式

本地联调可使用 VisitorAuth.apiKey(apiKey, bid, uid)。它在客户端生成一小时有效的 Token,业务请求与生产 Token 完全相同;仅适用于商户明确认可的可信调试环境。

调试完成后必须切换回 tokenProvider,并检查构建产物、日志和错误上报中不包含 API Key 或完整 Token。