diff --git a/.trellis/tasks/07-30-pc-wecom-qr-login/implement.md b/.trellis/tasks/07-30-pc-wecom-qr-login/implement.md index 68d36728..79383ca3 100644 --- a/.trellis/tasks/07-30-pc-wecom-qr-login/implement.md +++ b/.trellis/tasks/07-30-pc-wecom-qr-login/implement.md @@ -2,8 +2,8 @@ ## 1. Preconditions -- [ ] 只读核对企微自建应用已开启“企业微信授权登录”。 -- [ ] 只读核对 OA 公网域名已配置为 OAuth 可信域名或 Web 网页授权回调域名,且回调地址仍指向现有 `/api/auth/wecom/callback`。 +- [x] 用户在企微后台只读确认自建应用已开启“企业微信授权登录”。 +- [x] 用户在企微后台只读确认 OA 公网域名已配置为 Web 授权回调域名;生产配置与托管页契约检查继续使用现有 `/api/auth/wecom/callback`。 - [x] 不在代码、日志、Trellis 或聊天中输出 CorpID、AgentID、Secret、真实 userid、code 或 state。 - [x] 用户批准本 PRD、设计和实施计划后,才运行 `task.py start` 并修改产品代码。 @@ -72,18 +72,18 @@ git diff --check - [x] 认证改动完成后做只读安全/权限 review,不由 reviewer 修改代码。 - [x] 若实现形成稳定合同,更新 `.trellis/spec/hyb-oa/wecom-boundary.md`。 - [x] 仅在确有操作差异时更新现有管理员手册、部署 checklist/runbook;不新建平行文档。 -- [ ] commit 使用中文并引用 `07-30-pc-wecom-qr-login`。 +- [x] commit 使用中文并引用 `07-30-pc-wecom-qr-login`。 ## 6. Production Gate -- [ ] 企微后台“企业微信授权登录”和回调域名核验取得明确批准并完成。 +- [x] 企微后台“企业微信授权登录”和回调域名核验已由用户完成。 - [x] 生产部署已单独获批并完成;未同步或覆盖生产 `.env`,PC 扫码开关保持关闭。 -- [ ] 生产配置开启 PC 扫码功能取得另行批准。 -- [ ] 真实 PC 扫码或企微桌面端快速登录验收取得另行批准。 +- [x] 生产配置开启 PC 扫码功能已单独获批并完成。 +- [x] 用户按获批生产验收步骤完成真实 PC 扫码登录。 - [x] 部署后公网 `/ready`、前端构建标识、企微公开配置、密码/邮箱验证码页面入口和工作台入口可用性冒烟通过;本轮未输入凭据或发送验证码。 -- [ ] 开启 PC 开关后,由一名已映射 active 员工完成真实 PC 扫码或企微桌面端快速登录,并安全回跳原页面。 -- [ ] 确认审计有 `entrySource=pc_qr` 且无敏感字段。 -- [ ] 验证关闭 PC 开关后按钮消失、其他登录方式不受影响。 +- [x] 开启 PC 开关后,已映射 active 用户完成真实 PC 扫码登录并进入 OA,无需 OA 密码或首次手工绑定。 +- [x] 生产只读审计确认最近成功登录为 `entrySource=pc_qr`,且 extra 仅含 `bindingSource` 与 `entrySource`,无敏感键。 +- [x] 实际回滚阶段验证开关关闭后 PC 按钮消失,密码、邮箱验证码和工作台入口继续存在;后续已重新成功开启。 ## 7. Interrupt and Rollback @@ -109,4 +109,14 @@ git diff --check - 公网真实浏览器只读核验确认密码和邮箱验证码标签存在、工作台入口提示存在、PC 扫码按钮数量为 0;未输入凭据或触发验证码。页面仅有既有 favicon 404,不影响登录入口。 - 自动备份三组 timer 和 WARCH3 timer 已刷新到新构建,4 个 timer 均为 enabled/active;发布后自动备份与新鲜度检查通过。 - 运行时依赖审计显示客户端无高危/严重,服务端无严重但仍有 16 个高危告警;本任务没有改动任何依赖或锁文件,该存量风险另行治理,不在认证任务中盲目执行破坏性升级。 -- 未执行企微后台设置、生产开关开启或真实扫码;任务保持 `in_progress`。 +- 本节记录的关闭态部署阶段尚未执行企微后台核验、生产开关开启或真实扫码;后续开启结果见第 10 节。 + +## 10. Production Enablement Evidence (2026-07-30) + +- 用户只读确认企微自建应用已开启授权登录,回调域名已配置为 OA 公网域名;未修改 Secret。 +- 生产开关写入和 server 重建已单独获批。首次命令在 Compose 只读状态查询时因未重复显式注入构建标识而失败,自动回滚后已证明配置、server 和公网均恢复关闭态。 +- 第二次使用完整构建标识和实测数据挂载重建 server,但主机无 Node 使外层 JSON 验证循环永远不能通过。中间时点只读检查曾观察到短暂开启,但脚本稍后按设计延迟回滚;用户看到旧入口后,公网复核证明开关已恢复为关闭。 +- 第三次改用生产主机已有的 Python 校验 `/ready`,脚本完整退出且明确 PASS。其后在逐步延迟的 3 次公网采样中,开关持续为开启、`pcLoginUrl` 持续存在,构建标识未变。 +- 稳定开启后 external deps、runtime smoke 和 4 个 timer 状态通过。直接 PC 入口契约验证确认 302 到企微托管 Web 登录页、`login_type=CorpApp`、state 存在,且关联 cookie 为 HttpOnly/SameSite=Lax;未跟随至企微或消费 code。 +- 公网真实浏览器确认“企业微信扫码登录”按钮恰好 1 个,密码和邮箱验证码入口继续存在。 +- 用户完成真实 PC 扫码并成功进入 OA。生产只读审计确认最近成功登录为 `entrySource=pc_qr`,时间与本次验收一致,extra 仅含两个允许字段,不含 code、state、nonce、Secret、userid 或原始响应键。 diff --git a/.trellis/tasks/07-30-pc-wecom-qr-login/prd.md b/.trellis/tasks/07-30-pc-wecom-qr-login/prd.md index 2ffba813..1ea33e7f 100644 --- a/.trellis/tasks/07-30-pc-wecom-qr-login/prd.md +++ b/.trellis/tasks/07-30-pc-wecom-qr-login/prd.md @@ -60,15 +60,15 @@ ## Acceptance Criteria -- [ ] 普通 PC 浏览器登录页出现明确的企业微信 Web 登录入口,企业微信内置 WebView 仍走原工作台入口。 -- [ ] 已映射 active 员工使用手机企微扫码后进入原请求的安全 OA 页面,无需 OA 密码或首次绑定。 -- [ ] 已登录企微桌面端时,可按企微官方组件能力完成快速登录或扫码登录。 -- [ ] 未映射、冲突、OA 停用和企微停用账号均失败关闭,页面提示不引导用户先用密码绑定。 -- [ ] 登录成功审计可区分 `pc_qr` 与 `wecom_workbench`,且不含 code、state、Secret、完整 userid 或原始 payload。 -- [ ] state 篡改、过期、非法入口来源、缺 code、重复使用 code 和恶意 returnTo 的自动化负例通过。 -- [ ] PC 扫码回调缺少、篡改或不匹配浏览器关联 cookie 时失败关闭且不调用企微 code 兑换接口;正常浏览器回调后 cookie 被清除,企微一次性 code 回归证明不会创建第二个会话。 -- [ ] 现有工作台登录、绑定、onboard、账号密码和邮箱验证码回归通过。 -- [ ] 本地后端/前端门禁通过;获得部署批准后,生产配置核验、公网构建标识、真实 PC 扫码和回滚检查通过,之后才通知用户可测试。 +- [x] 普通 PC 浏览器登录页出现明确的企业微信 Web 登录入口,企业微信内置 WebView 仍走原工作台入口。 +- [x] 已映射 active 用户使用手机企微扫码后进入 OA,无需 OA 密码或首次绑定。 +- [x] 企微托管 Web 登录页可按官方能力完成桌面端快速登录或手机扫码;本次已完成真实手机扫码验收。 +- [x] 未映射、冲突、OA 停用和企微停用账号均由聚焦负例证明失败关闭,页面提示不引导用户先用密码绑定。 +- [x] 生产登录成功审计明确记录 `pc_qr`,且只读检查确认不含 code、state、Secret、完整 userid 或原始 payload 键。 +- [x] state 篡改、过期、非法入口来源、缺 code、重复使用 code 和恶意 returnTo 的自动化负例通过。 +- [x] PC 扫码回调缺少、篡改或不匹配浏览器关联 cookie 时失败关闭且不调用企微 code 兑换接口;正常浏览器回调后 cookie 被清除,企微一次性 code 回归证明不会创建第二个会话。 +- [x] 现有工作台登录、绑定、onboard、账号密码和邮箱验证码回归通过。 +- [x] 本地后端/前端门禁、生产配置核验、公网构建标识、真实 PC 扫码、审计抽查和开关回滚检查均通过。 ## Test Plan