设备身份重置与原设备安全重新注册 #201

Open
opened 2026-09-03 10:31:30 +08:00 by ila · 3 comments
Owner

需求摘要

管理员需要在 Admin 设备管理中安全恢复因本地服务切换导致 Token 与既有 installId 不一致的 Android Agent。当前手机提示身份校验失败:installId 已注册,需要该设备的有效 Token。

范围

  • Admin 设备管理新增仅管理员可执行的重置设备身份动作并明确确认。
  • 服务端为既有设备发放短时、一次性重新注册授权;不返回旧 Token、不保存明文 Token。
  • Agent 使用授权将同一 installId 重新绑定到原 deviceId 并获得新 Token。
  • 保留设备记录、设备 ID、能力与已分配但未领取任务;不得创建替代设备记录。

非范围和安全边界

不清除应用数据,不直接改库,不执行采购、下单或支付;不改变 HTTP/TLS 安全边界,授权和 Token 不写入日志或普通接口。

设计证据

复用现有设备管理卡片及危险动作确认,不新建页面;覆盖正常、离线、授权已发放、过期或已使用、停用和失败状态。

验收

  1. 管理员可对未停用设备发起安全重置,页面不显示 Token 或授权原文。
  2. 同一安装实例仅凭一次性授权重新绑定原 deviceId;旧 Token 失效。
  3. 已绑定 pending 采购任务保留原 deviceId;重连在线后可领取,实施和测试不实际领取或执行采购。
  4. 授权过期、重复使用、installId 不符与设备停用有稳定错误码。
  5. 更新业务规则、Agent API 契约和安全说明,完成 Wiki 镜像同步。

风险

认证与任务归属变更;管理员实际重置设备为外部状态改变,待实现后由用户确认执行。

## 需求摘要 管理员需要在 Admin 设备管理中安全恢复因本地服务切换导致 Token 与既有 installId 不一致的 Android Agent。当前手机提示身份校验失败:installId 已注册,需要该设备的有效 Token。 ## 范围 - Admin 设备管理新增仅管理员可执行的重置设备身份动作并明确确认。 - 服务端为既有设备发放短时、一次性重新注册授权;不返回旧 Token、不保存明文 Token。 - Agent 使用授权将同一 installId 重新绑定到原 deviceId 并获得新 Token。 - 保留设备记录、设备 ID、能力与已分配但未领取任务;不得创建替代设备记录。 ## 非范围和安全边界 不清除应用数据,不直接改库,不执行采购、下单或支付;不改变 HTTP/TLS 安全边界,授权和 Token 不写入日志或普通接口。 ## 设计证据 复用现有设备管理卡片及危险动作确认,不新建页面;覆盖正常、离线、授权已发放、过期或已使用、停用和失败状态。 ## 验收 1. 管理员可对未停用设备发起安全重置,页面不显示 Token 或授权原文。 2. 同一安装实例仅凭一次性授权重新绑定原 deviceId;旧 Token 失效。 3. 已绑定 pending 采购任务保留原 deviceId;重连在线后可领取,实施和测试不实际领取或执行采购。 4. 授权过期、重复使用、installId 不符与设备停用有稳定错误码。 5. 更新业务规则、Agent API 契约和安全说明,完成 Wiki 镜像同步。 ## 风险 认证与任务归属变更;管理员实际重置设备为外部状态改变,待实现后由用户确认执行。
Author
Owner

实现完成,待验收

  • 提交:379a83f feat(device): 安全恢复原设备身份 (#201),已推送至 feat/200-ai-match-result-purchase-ready。
  • Admin 设备管理新增管理员专用“重置设备身份”:旧 Token 立即失效,后台确认框只展示一次 10 分钟单次恢复码。
  • Android 设置页在身份校验失败时显示“使用管理员恢复码重新注册”;不持久化恢复码。成功后原 deviceId 保留并保存新 Token。
  • 服务端保留原设备行、能力与已分配 pending 任务;恢复码仅保存 SHA-256 摘要,过期或重复使用被拒绝。
  • 验证通过:go test ./app/goauto/device ./app/goauto/purchase ./app/goauto/task、go test ./app/goauto/migrations ./app/goauto/device、android :app:compileDebugKotlin、web pnpm run build:prod、harness.py check --strict。
  • 未执行真机重置、恢复、任务领取或采购。主工作区 harness.py sync 被既有无关的 docs/12-syb-erp-interface.md 未提交改动保护性阻止;Wiki 已在线恢复并更新 Business-Rules-and-Glossary(fe52de8)与 Android-Agent-API-Contract(618202a),镜像同步待该无关改动处理后补做。
## 实现完成,待验收 - 提交:`379a83f feat(device): 安全恢复原设备身份 (#201)`,已推送至 `feat/200-ai-match-result-purchase-ready`。 - Admin 设备管理新增管理员专用“重置设备身份”:旧 Token 立即失效,后台确认框只展示一次 10 分钟单次恢复码。 - Android 设置页在身份校验失败时显示“使用管理员恢复码重新注册”;不持久化恢复码。成功后原 `deviceId` 保留并保存新 Token。 - 服务端保留原设备行、能力与已分配 pending 任务;恢复码仅保存 SHA-256 摘要,过期或重复使用被拒绝。 - 验证通过:`go test ./app/goauto/device ./app/goauto/purchase ./app/goauto/task`、`go test ./app/goauto/migrations ./app/goauto/device`、`android :app:compileDebugKotlin`、`web pnpm run build:prod`、`harness.py check --strict`。 - 未执行真机重置、恢复、任务领取或采购。主工作区 `harness.py sync` 被既有无关的 `docs/12-syb-erp-interface.md` 未提交改动保护性阻止;Wiki 已在线恢复并更新 Business-Rules-and-Glossary(`fe52de8`)与 Android-Agent-API-Contract(`618202a`),镜像同步待该无关改动处理后补做。
Author
Owner

??????(??????)nn???????? 1787983800000_device_identity_recovery:agent_device ??????? 3 ???,???? ID 7(??2)?????????????????????????????????;??????????????,???????????

## ??????(??????)`n`n???????? `1787983800000_device_identity_recovery`:`agent_device` ??????? 3 ???,???? ID 7(??2)?????????????????????????????????;??????????????,???????????
Author
Owner

线上迁移修复完成,待人工验证。已获用户授权并在生产服务器运行当前发布包的标准迁移命令。迁移 1787983800000_device_identity_recovery 已登记;agent_device 的 recovery_code_digest、recovery_expires_at、recovery_used_at 三字段均已确认存在,并创建对应恢复字段索引。迁移输出:新执行 1 个、已跳过 34 个;过程中未重启服务,未执行设备重置、任务领取、采购、下单或支付。复核:goauto.service 为 active,本机健康检查正常。请在生产 Admin 的设备页再次点击“测试2 → 重置设备身份”验证;该动作会使该设备当前 Token 失效,属于预期安全行为。长期文档影响:无。本次仅补齐已发布功能的遗漏数据库迁移,未改变接口或业务契约;因此未更新 Wiki。

线上迁移修复完成,待人工验证。已获用户授权并在生产服务器运行当前发布包的标准迁移命令。迁移 1787983800000_device_identity_recovery 已登记;agent_device 的 recovery_code_digest、recovery_expires_at、recovery_used_at 三字段均已确认存在,并创建对应恢复字段索引。迁移输出:新执行 1 个、已跳过 34 个;过程中未重启服务,未执行设备重置、任务领取、采购、下单或支付。复核:goauto.service 为 active,本机健康检查正常。请在生产 Admin 的设备页再次点击“测试2 → 重置设备身份”验证;该动作会使该设备当前 Token 失效,属于预期安全行为。长期文档影响:无。本次仅补齐已发布功能的遗漏数据库迁移,未改变接口或业务契约;因此未更新 Wiki。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#201