Embedded Token Exchange
Token exchange 只能从 App 后端调用。后端使用 AppClient client_id 和一次显示的 client_secret 进行 HTTP Basic 认证,终端应用不得持有这组凭据。
| operationId | 方法 | 路径 |
|---|---|---|
exchangeAppUserToken | POST | /api/v1/apps/{app}/token-exchange |
revokeAppUserTokens | POST | /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 没有默认持久化,也不会自动刷新访问令牌。