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

80 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)