feat(auth): implement user and device authentication

This commit is contained in:
QiuSW
2026-07-26 15:18:48 +08:00
parent c5d3b215ff
commit 49db5b8305
66 changed files with 6216 additions and 271 deletions
+12 -1
View File
@@ -81,6 +81,16 @@
- 状态变化校验当前状态、设备归属、claim token、版本和租约。
- 创建、领取、完成和证据上传的重试路径必须幂等。
- 不向客户端返回 `password_hash`、`token_hash`、存储绝对路径或供应商密钥。
- 管理 Cookie 与 BUYER 设备 Bearer token 使用独立 middleware,不得互相替代;
每次鉴权都重新检查用户/设备启用、绑定、撤销和过期状态。
- 密码使用 bcrypt;session、设备 secret 和 access token 使用至少 256 bit 随机值,
持久化层只保存 SHA-256。账号和设备只由 `authctl` 显式预置。
- 管理 Web POST 校验双提交 CSRF;Cookie 管理 API 的非安全方法额外校验
`X-CSRF-Token`。登录成功同时轮换 session 和 CSRF。
- 管理/App 登录必须在 bcrypt 前按服务端 `RemoteAddr` 独立限流;不得信任未配置的
转发头。限流器必须并发安全、内存有界,超限返回通用 `429` 和 `Retry-After`。
- 创建和取消任务必须从认证上下文传入真实 ADMIN actor 并写入只追加事件;共享
`local-admin` 只用于 MVP 资源可见范围,不能冒充操作者。
- 通用错误使用稳定 code 和可读 message;内部堆栈只进受控日志。
- 文件访问通过鉴权接口,防止路径遍历和猜测 URL。
- Go 命令固定 `GOTOOLCHAIN=local`;`go.mod` 不得出现更高 Go 版本或未固定的
@@ -135,5 +145,6 @@
项目标准验证命令是根目录 `.\init.ps1`;它执行 Android Gradle `test` 和
`assembleDebug`,再以 `GOTOOLCHAIN=local` 执行后端 `go test ./...`、
`go vet ./...`、`gofmt` 检查和两个入口构建。设置 `RUN_START_COMMAND=1` 时使用
`go vet ./...`、`gofmt` 检查和 API/migration/authctl 三个入口构建。设置
`RUN_START_COMMAND=1` 时使用
SDK 内新版 ADB 安装并启动 Android App。