gpt4 book ai didi

javascript - 带有 REST API 身份验证的 WebRTC 的 TURN 服务器

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:05 25 4
gpt4 key购买 nike

我正在尝试为来自 here 的 webRTC 设置 rfc5766-turn-server TURN 服务器.我能够使用 turnuserdb.conf 文件通过此 TURN 服务器成功中继我的视频,其中我有我的用户名和密码 (my_user_name:my_password)。在 Web 客户端,我使用了:

"iceServers":{[
"url": "turn:my_user_name,@turn_server_ip",
"credential":"my_password"
}]

我正在尝试使用 TURN 服务器附带的 REST API 功能来避免通过网络发送密码或将其存储在客户端。我关注了this specthis explanation在 Rest API 下

但是不幸的是,我收到了 401 并且我无法进行身份验证。

这就是我所做的:

  1. 我创建了一个 secret “my_secret”并像这样运行了转弯服务器:

    turnserver -v --syslog -a -L xx.xxx.xx.xx -X yy.yyy.yyy.yy -E zz.zzz.zz.zzz --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=my_secret --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q 300 --cipher-list=ALL

    (我只是将IP地址替换为xx.xxx.xx.xx yy.yyy.yyy.yy zz.zzz.zz.zzz)

  2. 后来我生成了一个时间戳,现在是 + 1 小时,所以我在 nodejs 上运行:

    Date.now()+1000*60*60;      // output 1433895918506.

    我在 this website 上生成了临时密码,使用我的 secret ,得到了结果 0ca57806bdc696b3129d4cad83746945b00af77b

  3. 我将密码编码为 base64

  4. 现在,我尝试使用临时用户名:1433895918506:my_user_name 和密码:MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg== 从 Web 客户端与 Turn 服务器进行日志通信,我现在使用的 Web 客户端

    "iceServers":"url":"turn:1433895918506:my_user_name@turn_server_ip","credential":"MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg=="}]

但它不起作用,我得到:

401 user <1433895918506:my_user_name>  incoming packet message processed, error 401: Unauthorised.

你能帮我找出问题所在吗?

最佳答案

当我用你的名字和 secret 生成凭证时,我得到的是 1Dj9XZ5fwvKS6YoQZOoORcFnXaI= 而不是 MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==,检查你的算法/代码是否有错误.

并且时间是 Unix 时间戳,所以以秒为单位,而不是像您所做的那样以毫秒为单位(虽然这不应该影响,但只会让您的凭据永不过期)

检查您的系统和运行 TURN 服务器的系统,时钟是否同步(至少不是相隔几天),一般来说,为了避免时钟不同步的问题,最好使用 ttl 作为 24小时,所以你的时间戳:

timestamp=  parseInt(Date.now()/1000) + 24*3600

生成TURN凭证的代码:

var crypto = require('crypto');

function getTURNCredentials(name, secret){

var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600,
username = [unixTimeStamp, name].join(':'),
password,
hmac = crypto.createHmac('sha1', secret);
hmac.setEncoding('base64');
hmac.write(username);
hmac.end();
password = hmac.read();
return {
username: username,
password: password
};
}

关于javascript - 带有 REST API 身份验证的 WebRTC 的 TURN 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com