Files
cmautobuy/docs/task/94-client认证更新配置与自动检查.md
T
2026-08-10 14:33:25 +08:00

4.0 KiB
Raw Blame History

94 Client:增加认证更新配置与启动自动检查

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:MVP 后续 / 在线更新
  • 状态:已完成
  • 日期:2026-08-10
  • Gitea 工单:#94

背景与目标

#93 已支持在线更新,但发布服务器需要 Basic Authentication。此任务增加更新配置 保存和启动自动检查,同时保证密码不进入源码、Git、SQLite、日志、工单和文档。

最终方案

  • 设置页保留清单 URL、账号、密码三个输入框,增加“保存”按钮。
  • URL 和账号保存到现有非敏感 SQLite 设置;密码只保存到 Windows 凭据管理器。
  • 密码框使用隐藏模式,已有密码不回填明文;留空保存表示不修改已有密码,修改账号 或服务器后必须重新输入密码。
  • Windows 凭据按照协议、主机和端口隔离,避免把旧服务器密码误发到新服务器。
  • 已保存完整配置时,Client 启动后通过 Qt Worker 自动检查一次;最新版或网络失败 不弹窗,只有发现新版时请求用户确认下载。
  • 清单和更新包都在内存中添加 Basic Authentication。固定发布主机临时允许默认端口 HTTP,其他 HTTP 地址、URL 凭据、查询参数、片段和跨源重定向仍被拒绝。
  • 保留 #93 的大小、SHA256、版本、安全解压、下次启动替换和失败回退流程。
  • Client 版本升级为 0.2.1。

实现过程中增加了按 URL 源隔离系统凭据的保护。这比建单时的单一固定凭据目标更 安全,不改变用户确认的界面和使用流程。

改了哪些

  • client/src/windows_credential_store.py:Windows Credential API 小型封装。
  • client/src/update_service.py:Basic Authentication、固定 HTTP 主机白名单、 Unicode URL 路径编码和跨源重定向保护。
  • client/src/update_ui_event.py:显式保存、系统凭据读取、启动检查和线程生命周期。
  • client/src/settings_ui.py、settings_ui_event.py:账号、密码、保存按钮和事件装配。
  • client/src/version.py:版本更新为 0.2.1。
  • client/test/test_update_service.py、test_update_ui_event.py、 test_windows_credential_store.py:认证、安全边界、表单和自动检查测试。
  • docs/client/:同步术语、需求、架构、界面与安全基线。

验收结果

验收标准 结果
设置页显示 URL、账号、隐藏密码、保存和检查控件 通过
URL/账号重启恢复,密码不进入 SQLite 和源码 通过
密码使用 Windows 凭据管理器,留空不会覆盖已有密码 通过
未保存密码和未保存修改具有明确提示 通过
清单与 ZIP 都携带认证且错误信息不泄露密码 通过
HTTP 只允许固定主机,跨源重定向被拒绝 通过
已保存配置在启动后异步检查且不阻塞界面 通过
发现新版后复用 #93 的下载和更新流程 通过
真实下单开关、Admin 接口和采购流程未改变 通过
自动测试、凭据往返和打包验证通过 通过

测试

  • 执行的命令:
    • 在 client/ 执行 C:/Python310/python.exe -m pytest test -q --disable-warnings
    • 使用虚构测试凭据调用 Windows 凭据管理器写入、读取和删除
    • 在 client/ 执行 .\build_client.bat
    • 离屏启动 client/release/CMAutoBuy-0.2.1/Launcher.exe
  • 结果:264 项测试通过;系统凭据往返通过且测试凭据已删除;0.2.1 发布产物生成 成功;打包程序启动成功。
  • 没验证到的部分:未使用真实发布密码访问线上清单和 ZIP;尚未在全新且未安装 Python 的 Windows 机器上验证凭据保存和完整在线更新。

遗留问题

  • 当前固定发布服务器使用 HTTP Basic Authentication,不能抵抗链路监听和中间人 攻击;条件允许时应迁移到 HTTPS。

相关提交

  • dc375ff feat: 增加认证更新配置与自动检查 (#94)