diff --git a/docs/task/50-ONVIF与RTSP分离凭据并持久化Profile.md b/docs/task/50-ONVIF与RTSP分离凭据并持久化Profile.md new file mode 100644 index 0000000..17ca5e2 --- /dev/null +++ b/docs/task/50-ONVIF与RTSP分离凭据并持久化Profile.md @@ -0,0 +1,71 @@ + +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 工单:https://git.ilapage.cn/ila/yovision/issues/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 镜像。 diff --git a/wiki-docs.json b/wiki-docs.json index 25bf3f3..4b2e528 100644 --- a/wiki-docs.json +++ b/wiki-docs.json @@ -135,6 +135,10 @@ { "page": "Task-48-支持ONVIF-Digest认证与安全Media地址归一化", "path": "docs/task/48-支持ONVIF-Digest认证与安全Media地址归一化.md" + }, + { + "page": "Task-50-ONVIF与RTSP分离凭据并持久化Profile", + "path": "docs/task/50-ONVIF与RTSP分离凭据并持久化Profile.md" } ] }