You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Janus WebRTC签名令牌验证失败求助:始终提示未授权

解决Janus WebRTC签名令牌未授权问题

针对你遇到的"Unauthorized request (wrong or missing secret/token)"错误,按以下步骤排查修复:

1. 修复令牌生成代码的语法错误

你的token.js存在两处语法问题,会导致令牌生成异常:

  • 将data = ,改为data = [],初始化空数组避免参数错误
  • 将consol.log改为console.log,修正拼写错误

修正后的完整代码:

const crypto = require('crypto');
function getJanusToken(realm, data = [], timeout = 24 * 60 * 60) {
  const expiry = Math.floor(Date.now() / 1000) + timeout;
  const strdata = [expiry.toString(), realm, ...data].join(',');
  const hmac = crypto.createHmac('sha1', 'a1');
  hmac.setEncoding('base64');
  hmac.write(strdata);
  hmac.end();
  return [strdata, hmac.read()].join(':');
};
const token = getJanusToken('janus', ['janus.plugin.videoroom', '445946']);
console.log(token);

2. 在令牌中包含房间ID

当房间开启signed_tokens时,Janus要求令牌的data字段必须包含目标房间ID(你的房间是445946),否则会判定为无权访问。上述修正后的代码已将房间ID加入data数组,生成的令牌会包含房间信息,满足验证要求。

3. 确认Janus配置生效

修改配置文件后必须重启Janus服务,否则新配置不会生效:

sudo systemctl restart janus

4. 验证令牌传递方式

可以选择两种方式传递令牌:

  • 方式一:在attach插件时传递(推荐,一次验证后续请求无需重复携带)
    janus.attach({
      plugin: "janus.plugin.videoroom",
      token: "生成的令牌字符串",
      success: function(pluginHandle) {
        // 在此处执行join请求
        var registerRequest = {
          "request": "join",
          room: myRoom,
          ptype: "publisher",
          display: "Anonymous"
        };
        pluginHandle.send({ message: registerRequest });
      }
    });
    
  • 方式二:在join请求中携带(你的当前方式,需确保token字段为顶级键)
    保持现有代码,但需确保令牌包含房间ID。

5. 校验时间同步

Janus会验证令牌的过期时间,若客户端与服务器时间差过大,会导致令牌被判定为过期。在服务器执行date +%s,对比令牌中的expiry值,确保差值在合理范围内(比如不超过5分钟)。

6. 确认密钥一致性

确保token.js中的密钥a1与janus.jcfg中token_auth_secret的配置完全一致,注意大小写、空格等细节。

内容的提问来源于stack exchange,提问作者homievk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:55