Appearance
ADR-022: 认证仅用签名 URL
Status: Accepted Date: 2026-07-13
Context
播放器需要认证保护视频源,可选:
- A: source.headers(HTTP header 认证)
- B: source.getHeaders(动态 header)
- C: 签名 URL
- D: Cookie
Decision
v1.0 只支持签名 URL(方案 C),移除 headers / getHeaders。保留 source.onBeforeRequest 但明确 iOS Safari HLS 硬限制。
Rationale
- MP4 + iOS Safari HLS 场景 headers 硬不生效(浏览器 API 不支持)
- onBeforeRequest 也无法拦截 iOS Safari 原生 HLS
- 签名 URL 是唯一跨平台可行方案
- 建议签名 URL 有效期 6-12 小时(覆盖单次播放)
- 后端配合会话跟踪(IP / UA 绑定 / 并发限制)
Consequences
好:
- 4 种接入方式 + 全平台一致
- 后端可控 session 生命周期
- iOS Safari 场景不再有"headers 时灵时不灵"问题
代价:
- 无法在长会话中动态刷新认证
- 需要后端配合签名 URL 生成 API
Alternatives Considered
- 方案 A/B: iOS Safari 不生效,导致关键平台无法保护
- 方案 D: Cookie 依赖同域 + 第三方 Cookie 限制越来越严