第三方集成安全实践

安全实践

凭证保护、Token 安全与集成方安全建议。

凭证存储

凭证性质保管建议
client_id公开标识可在集成方应用中使用
client_secret长期机密妥善保管,避免随源码 / 应用包体 / 前端代码 / 日志外泄
code_verifier一次性授权流程内使用,用完即弃
access_token短期凭证(1 小时)限定调用方持有,不建议在多端之间传播
refresh_token长期凭证(永久有效)client_secret 同等强度保管
ℹ️

上表只描述凭证的安全等级,具体存储位置(应用进程内存 / Keychain / 自有密管系统等)由集成方按自身架构决定。

webview token 安全

  • 一次性签发 — 调用 获取内嵌页 URL 接口每次返回新 token
  • 可重放 — 在服务端规定的有效期内可被多次使用(WebView 内多次刷新页面、调用接口都用同一 token),不绑定 IP / UA(否则移动设备切网会失败)
  • 泄露风险 — URL 中的 token 可能出现在浏览器历史、Referer header、应用日志
  • 最佳实践 — 临用临换,不要把 webview URL 长期缓存
⚠️

避免把内嵌页 URL 写入持久化日志,防止 token 泄露后被重放利用。

state 参数与 CSRF 防护

为防 CSRF,建议:

  1. 每次发起授权前生成新的 state(≥ 32 字节随机串)
  2. 与 PKCE code_verifier 一同绑定到当前会话
  3. 回调返回时,校验 state 与本地一致后再进入换 token 流程

指定 Space 模式安全说明

风险处理方式
space_id 在授权 URL 中被中间人篡改服务端在 GET /openapi/v1/oauth/auth 阶段将 space_id 锁入 session;Consent 页只持有 session_token,无法修改绑定的 Space
恶意方伪造授权 URL 向任意 Space 塞入成员预添加成员接口需要有效 Bearer Token,且 App 必须有权操作目标 Space;未授权 App 无法调用
未预添加的用户尝试通过 OAuth 授权进入 Space服务端校验成员是否存在,不存在则返回 access_denied,不会自动创建成员