Skip to content

鉴权设计

核心凭证

凭证获取方式存储位置用途
appKey开发者自行定义为生成器 id前端代码中标识当前生成器,用于数据隔离
uToken用户登录后获得平台共享域 utoken Cookie标识用户身份

请求 Header

SDK 每个请求自动携带:

http
uToken: {用户的 uToken}
lang: {localStorage LANG_KEY 的值,默认 'en'}

TIP

当前实现中 X-App-Key Header 已注释,appKey 通过请求体中的 category 字段传递来实现数据隔离。

Token 存储

  • SDK 与社区项目对齐,统一读写平台共享域下的 utoken Cookie
  • appKey 继续用于业务数据隔离,但不再作为 token 存储 key 的一部分
  • 初始化时如果发现旧版 __atomm_sdk_token__{appKey} 仍存在,会在首次读取时自动迁移到 utoken Cookie
  • Cookie 不可用时(SSR / 隐私模式)静默忽略

Token 生命周期

登录 → setToken(appKey, token) → 写入 `utoken` Cookie
请求 → getToken(appKey) → 注入到 uToken Header
失效 → clearToken(appKey) → 清除 `utoken` Cookie → 触发 logout
退出 → clearToken(appKey) → passport-client.logout()
恢复 → getToken(appKey) → passportClient.userInfo() 验证 → 成功则恢复状态
Studio 内嵌 → 读取 Studio token / 监听 UserStateChanged → syncToken() → 与 Studio 主应用保持一致

Studio 内嵌登录态

当生成器被 xTool Studio 内嵌时,SDK 会在 auth.ready() 的初始化流程中默认同步 Studio 登录态:

  • 无界微前端场景读取 window.$wujie.props.token,并订阅 window.$wujie.busUserStateChanged
  • iframe 场景读取 <iframe name="xTool-Studio-iframe" data-initial="..."> 中的初始 token,并监听 Studio postMessage 下发的 UserStateChanged。Studio Electron 内的 atomm://renderer 属于可信来源。
  • Studio token 优先级高于本地缓存;Studio 下发空 token 会清除 SDK 本地登录态。

生成器仍然通过 sdk.auth.getStatus()sdk.auth.ready()sdk.auth.onChange() 获取最终状态,无需关心当前是平台网页还是 Studio 内嵌环境。

安全性说明

风险点防护措施
appKey 被滥用appKey 本身只标识应用,不授权任何操作;用户未登录时所有 API 都失败
积分被恶意扣取credits.consume 后端校验 app_key 是否申请了该 action 权限
数据跨应用访问后端以 category(appKey)+ uid 为复合维度隔离数据
uToken 泄露通过平台共享域 Cookie 管理,应用运行在平台域名下
恶意应用代码上传后经安全扫描 + 人工审核,审核通过才能上线
跨域画布污染canvas.toDataURL() 捕获 SecurityError 并降级处理

MIT Licensed