跳转至

会话安全与 HTTP 代理升级说明

本变更随当前源码发布,具体发布版本以根目录 VERSION 为准。

数据库与登录态

升级前备份数据库,使用 draarl -c config.yaml -auto-migrate 执行迁移,再启动其它实例。 本次 schema 版本为 3:users.session_version 默认 1,并幂等创建默认公共频道 999。 重复迁移不会覆盖已有频道;已有 999 必须是启用的实体公共频道,启动自检会拒绝不符合条件的数据。 该频道可改名和备注,但不能删除、停用或设为私有。

旧 access、discovery JWT 和历史 refresh 记录不再接受,升级后所有浏览器及使用 JWT 的客户端需要重新登录。 普通设备密码协议不受 JWT 格式变化影响。JWT 身份使用不可变用户 ID(sub),用户名不再作为身份主键。 改名、角色或审批变更、禁用及改密码会递增会话版本,旧 access/refresh/discovery 会失效。 HTTP/discovery 认证读取数据库当前用户状态,不使用进程内资料缓存,以免其它实例的变更延迟生效。 因此认证请求会增加数据库读取;扩容时应根据实测配置连接池和数据库容量。 现有已建立的实时连接仍沿用已有路由撤销机制;本变更不会增加每个音频数据包的数据库查询。 多实例部署应协调更新全部中心实例,避免旧实例继续接受旧格式令牌。

HTTP 可信反代

直连服务保持默认值:

System:
    HTTPTrustedProxyCIDRs: []

仅将实际 HTTP 反向代理的来源地址列入名单。例如 Nginx 与服务在同一主机且通过 IPv4 回环访问:

System:
    HTTPTrustedProxyCIDRs:
        - "127.0.0.1/32"

Docker 场景填入实际反代容器的固定地址或其隔离网络的最小网段,写入持久化 config.yaml 后重启。 不要使用 0.0.0.0/0 或把任意客户端所在网段列为代理。此字段独立于 UDP 的 ProxyTrustedCIDRs。 只有可信来源的 HTTP 转发头参与客户端 IP 和 HTTPS Cookie 判定。反代必须覆盖 X-Forwarded-Proto, 并正确建立 X-Forwarded-For 链;直连客户端伪造这些头不会改变限流 IP 或 Cookie 的 Secure 属性。

浏览器麦克风和 HTTPS

公网/局域网 IP 的 HTTP 页面无法取得浏览器麦克风。将站点通过 HTTPS 发布,并同步修改 Web.FrontendURL、Web.AllowedOrigins 和对象存储浏览器地址;WebSocket 由 HTTPS 页面使用 WSS。 开发时可通过 http://localhost 访问。页面会说明不安全上下文的限制,并禁用按钮及键盘 PTT。 音频播放与文字消息仍按浏览器支持情况使用,不能把麦克风限制当作全部音频播放不可用。

通联日志编辑契约

更新 API:省略字段表示保持原值,空字符串清除可选文本;功率 null 清除,0 保存为零。 必填呼号/模式不能显式清空,时间必须符合 2006-01-02 15:04:05,更新频率必须大于零。 客户端需要避免在保存时把空 RST 或零值自动回填为默认值。