3.5 KiB
3.5 KiB
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Task-50-ONVIF与RTSP分离凭据并持久化Profile wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-50-ONVIF%E4%B8%8ERTSP%E5%88%86%E7%A6%BB%E5%87%AD%E6%8D%AE%E5%B9%B6%E6%8C%81%E4%B9%85%E5%8C%96Profile.- wiki_revision: 27ac0fe8ef97f9ec835fa62713f3a8c23c077940 synchronized_at: 2026-08-13T04:18:00Z
50 ONVIF与RTSP分离凭据并持久化Profile
- 类型:功能
- 所属 Epic:#7
- 所属 MVP / 版本:#8
- 状态:待验收
- 日期:2026-08-13
- Gitea 工单:#50
- Wiki 页面:Task-50-ONVIF与RTSP分离凭据并持久化Profile
- Wiki revision:见本地镜像头
背景与目标
真实摄像机的 ONVIF 与 RTSP 使用不同账号,旧版 Sense 每台设备只有一组凭据;接入结果还只保存在内存中。目标是分别安全保存两组凭据、持久化脱敏 Profile,并让接入成功的设备进入 active。
最终方案
- Device 新增独立 RTSP 密文与“复用 ONVIF”标志,旧凭据通过版本化迁移安全回填;API 只返回配置状态。
- 设备页面同时维护 ONVIF/RTSP 凭据,默认允许显式复用;审计只记录是否复用,不记录值。
- Admission 使用 ONVIF 凭据读取 Profile、RTSP 凭据验证视频;结果与脱敏 Stream URI、主/子码流、验证状态写入 PostgreSQL。
- 摄像机广播跨主机 RTSP URI 时,只把主机归一化到用户授权的 Device Service 主机,保留报告端口与路径。
- 至少一个 Profile 验证成功后 Device 进入 active;接入页切换设备时读取持久化结果。
- 真实设备使用分离凭据后 2 个 Profile 均 ready,重启 Sense 后仍可读取。
修改文件
Sense/server/app/sense/device/**:分离凭据模型、迁移、加密读写与内部端口。Sense/server/app/sense/admission/**:Profile Store、迁移、持久化和设备状态更新。Sense/server/app/sense/adapters/onvif/**:安全归一化跨主机 RTSP URI。Sense/server/cmd/sense/modules_device.go、modules_admission.go:注册版本化迁移与 PostgreSQL Store。Sense/ui/src/views/sense/device/Devices.vue、admission/Admission.vue:分离凭据表单与持久结果恢复。- Wiki 架构、业务规则和排错页面:记录新安全边界。
验收结果
| 验收标准 | 结果 |
|---|---|
| 两组凭据分别加密且只写不可读 | 通过 |
| 同凭据复用与分离凭据均受支持 | 通过 |
| Profile 重启后存在 | 通过,2 个 Profile |
| 至少一个 Profile ready 后设备 active | 通过 |
| 真实摄像机 ONVIF 与 RTSP 验证 | 通过,2/2 ready |
| 不泄露地址、密码、Authorization 或 Stream URI | 通过 |
测试
go test ./...:通过。pnpm lint:0 error,存在基线格式 warning。pnpm build:通过,存在既有 webpack 体积 warning。- Go 1.26.5 Windows 打包:通过。
- 真实设备脱敏验证:
admission_status=ready、profile_count=2、ready_profile_count=2、device_status=active。 - 重启验证:
persisted_status=ready、persisted_profile_count=2。 - 未验证部分:MediaMTX 自动路由与实时监看属于后续工单 #51。
遗留问题
- 无本工单范围内遗留;自动媒体路由在 #51 实施。
- 严格 Harness 仍受既有 #44 归档缺少“最终方案”章节影响。
相关提交
1a63264分离凭据、持久化 Profile 和真实地址归一化。032f8c5更新长期 Wiki 镜像。