安全与风控
调用 admin.da.live API 前获取并缓存…
当同一会话中还没有有效 DA_TOKEN,却需要调用 DA Admin API(推送/更新页面、列出文档、触发预览等)时,先取得一个可用的 Adobe IMS token 并放入 DA_TOKEN。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
调用 admin.da.live API特定
解决思路
- 触发浏览器登录前先检查缓存:用 node 读取 $HOME/.aem/da-token.json,仅当其中的 expires_at > Date.now() + 60000 时把 access_token 输出到 stdout 赋给 DA_TOKEN;若 DA_TOKEN 非空则直接跳到第 3 步验证。
- 首选方案 A:运行 `npx github:adobe-rnd/da-auth-helper token`(无需全局安装);若 npx 不可用或太慢,先 `npm install -g github:adobe-rnd/da-auth-helper`,再执行 `da-auth-helper token`。该工具会走完 IMS OAuth 2.0 implicit flow,把 token 缓存到 ~/.aem/da-token.json 并打印到 stdout。
- 浏览器打开后提示用户:请在刚打开的浏览器窗口中完成 Adobe IMS 登录,登录完成后 token 会被自动捕获。成功标志:DA_TOKEN 是一个非空、以 eyJ 开头的 JWT 字符串。
- 备选方案 B:若会话中已配置 DA MCP server,直接调用它自带的认证工具启动 OAuth 流程,并从返回结果中取出 token。
- 最后手段方案 C:请用户手动粘贴 token——打开 da.live 并登录,打开 DevTools → Network 找到任意发往 admin.da.live 的请求,复制 Authorization: Bearer <token> 中的 token 值(去掉 `Bearer ` 前缀)后粘贴。
- 用一次只读请求验证 token 可用:`curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer {{DA_TOKEN}}" "https://admin.da.live/list/{{ORG}}/{{REPO}}"`,返回 HTTP 200 即表示 token 有效、DA_TOKEN 可供调用方技能使用。
- 排障:第 1 步后 DA_TOKEN 为空说明没有缓存或已过期,继续执行第 2 步;浏览器窗口没弹出说明 npx/da-auth-helper 被限制或无头环境,改用方案 B 或 C。
- 排障:`npx github:adobe-rnd/da-auth-helper` 失败通常是 GitHub 包仓库网络受限,改用方案 B 或手动粘贴 token。
- 排障:第 3 步返回 401 说明 token 在步骤间过期,重跑第 2 步刷新;返回 403 说明当前用户没有该 {{ORG}}/{{REPO}} 的权限,请用户确认其在 DA 中的组织/仓库权限。
适用边界 · 注意事项
- 同一会话中之前已经拿到 DA_TOKEN 且尚未过期(token 有效期约 1 小时,预留 60 秒缓冲)时不要重复获取。
- create-site 技能已在其自身流程中处理认证时,不要在这个流程里再单独调用 da-auth。
- 会话中已有激活的 DA MCP server 时,应直接使用它的认证工具,而不是走本流程的浏览器登录。