# 94 Client:增加认证更新配置与启动自动检查 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:MVP 后续 / 在线更新 - 状态:已完成,用户验收通过 - 日期:2026-08-10 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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)