跳转到正文Skip to content

Embedded Token Exchange

Token exchange 只能从 App 后端调用。后端使用 AppClient client_id 和一次显示的 client_secret 进行 HTTP Basic 认证,终端应用不得持有这组凭据。

operationId方法路径
exchangeAppUserTokenPOST/api/v1/apps/{app}/token-exchange
revokeAppUserTokensPOST/api/v1/apps/{app}/token-revoke

交换令牌

external_user_id 必须匹配 [A-Za-z0-9_\-:.]{1,128},并且是 Application 范围内的匿名化标识。不要使用邮箱、手机号、昵称或全平台共享的用户 ID。

ts
// 仅在 App 后端运行;clientId 和 clientSecret 由 Secret Manager 注入。
const server = new ServerClient({ baseUrl, applicationCode, clientId, clientSecret })
const result = await server.exchangeAppUserToken('member_42')

成功结果包含短期不透明访问令牌、有效秒数、AppUser ID 和商店账户令牌。访问令牌不是 JWT,客户端不应解析;过期后由 App 后端在重新确认业务会话后再次交换。

只通过已认证且受 TLS 保护的业务会话把短期令牌交给终端,或由 App 后端代理平台请求。不要把令牌写入日志、异常、埋点、缓存、数据库或工单。

撤销与轮换

用户登出、账户关闭或出现安全事件时,由 App 后端调用 revokeAppUserTokens。撤销操作具有幂等性。AppClient secret 轮换时,先安全部署新凭据并验证交换,再停用旧凭据;不要把旧值留在配置样例或构建产物中。

终端使用 Keychain、Android Keystore 或调用方控制的等价安全存储。官方 SDK 没有默认持久化,也不会自动刷新访问令牌。