把它做成生产功能之前,需要先拆开协议事实、产品承诺和运行成本,三者混在一起很容易得到错误结论。 把固定 TURN 密码写进前端等于公开带宽账户。临时凭据通过服务端密钥为带过期时间的用户名签名,TURN 无需查询每个用户也能验证,但应用仍要控制谁可以领取、能领多少和何时续期。
WebRTC 的判断依据必须来自两端状态、信令版本和实际选中的候选对。只看某个浏览器回调会遗漏 glare、ICE 切路与对端刷新造成的分叉。
落地方案的关键部件
这项能力横跨客户端、网络与服务端,局部最优很容易制造全局故障。工程决策需要同时约束两端行为、持久化事实和运维预算。
- 用户名包含明确的 UTC 到期时间与不可猜测会话标识,密码只在服务端计算。
- 凭据寿命覆盖一次连接与合理重试,但明显短于用户登录或设备信任周期。
- 轮换共享密钥时保留短暂双密钥验证窗口,并监控旧版本领取与使用。
短期凭据不是单独的安全开关,它要与领取权限、用户配额、并发限制和密钥轮换共同构成可回收的 TURN 访问能力。
别让错误假设进入生产
失败路径需要与成功路径共享同一套状态模型。只弹一个错误提示却不释放资源、不传播终态,下一次恢复就会继承脏状态。
- 客户端时钟参与计算到期时间,时钟漂移导致刚领取的凭据立即失效。
- 退出只删除页面状态,仍有效的凭据可在数小时内被复制继续消耗流量。
- 凭据接口没有用户或 IP 速率限制,攻击者可批量领取再分发。
发布闸门应该检查什么
测试不能以“最后成功了”结束。还要测量经历了多少次副作用、等待多久、是否泄露内容,以及失败后再次执行能否从干净基线开始。
- 把服务端与 TURN 时钟故意错开边界值,验证容差不会扩大成过长有效期。
- 轮换密钥时保持现有连接、新连接和过期凭据三组用例同时运行。
- 复制凭据并发创建大量 allocation,确认配额、并发和审计能识别同一签发主体。
当实现能够安全降级、重复执行不产生额外副作用、故障指标早于投诉出现时,这项能力才算具备长期维护价值。