feat: 收口视频访问与摄像头密钥输出
This commit is contained in:
@@ -860,3 +860,33 @@ MVP 沿用 IoTDB(现状);TDengine 作为生产规模化候选(先基准
|
||||
### 回滚点
|
||||
|
||||
- 本记录仅修改文档,无代码、数据库、服务器或生成产物变更;如需回滚,删除本记录并恢复相关计划/决策表即可。
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-14 整改 Task 4:收口视频访问与摄像头密钥输出
|
||||
|
||||
### 做了什么
|
||||
|
||||
- 新增视频短时令牌服务:`IssueVideoToken` / `ValidateVideoToken` / `ValidateVideoTokenForUser`,令牌绑定用户、资源类型、资源 ID、用途和 5 分钟有效期;
|
||||
- `Camera.PasswordEnc`、`Camera.GbAuthPassword` 改为 `json:"-"`,新增 `CameraPublic` / `CameraInput` DTO,创建和更新仍可写入密码,但列表/详情/创建/更新响应不再返回密码;
|
||||
- 实时播放和录像播放接口统一返回带 `videoToken` 的代理 URL,不再返回 WVP/ZLM 直连地址;
|
||||
- `/video/clips/:clipId/stream`、`/video/cameras/:id/live/stream`、`/video/cameras/:id/live/proxy` 必须校验 token,缺失返回 401,错误/过期/资源错配返回 403;
|
||||
- 告警片段、Web 录像列表、APP 和小程序播放链路同步改为使用带 token 的地址;
|
||||
- WVP SIP 配置响应移除 `sipPassword`;前端 DAL 同步调整。
|
||||
|
||||
### 设计思路与决策依据
|
||||
|
||||
- 播放器标签无法稳定携带 Authorization,因此采用短时签名 token 作为流代理的 bearer capability,同时保留播放地址生成接口的 JWT + 权限校验;
|
||||
- 摄像头密钥字段允许写回但禁止输出,创建/更新走独立 `CameraInput`,对外统一 `CameraPublic`;
|
||||
- 当前项目没有用户级资源 ACL,Task 4 先收口“未授权直连”和“密钥返回”两类 P0;按用户/房间的对象级授权留待后续任务。
|
||||
|
||||
### 验证结果
|
||||
|
||||
- `scripts/verify.ps1` 最终 exit 0:Go test/vet/build、Web test/lint/build、小程序 typecheck/build、APP tsc/lint、AI pytest 均通过;
|
||||
- 新增测试覆盖:摄像头响应不含密码字段、token 正常/过期/资源错配/用户错配、流代理缺失或错误 token 返回 401/403;
|
||||
- 未部署开发服务器,未做真实摄像头播放联调。
|
||||
|
||||
### 回滚点
|
||||
|
||||
- 本任务前分支提交为 `440cf80`;回滚可还原 Task 4 提交;
|
||||
- 若已部署流代理版本,回滚需恢复旧二进制并重启,无需数据库变更;播放地址需由客户端重新请求。
|
||||
|
||||
Reference in New Issue
Block a user