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
相关产品推荐
相关产品推荐

