我正在尝试从此处为webRTC设置rfc5766-turn-turn TURN服务器。我可以使用turnuserdb.conf
具有我的用户名和密码(my_user_name:my_password)的文件成功通过此TURN服务器中继视频。在网络客户端,我使用了:
"iceServers":{[
"url": "turn:my_user_name,@turn_server_ip",
"credential":"my_password"
}]
我正在尝试使用TURN服务器附带的REST API功能,以避免通过网络发送密码或将密码存储在客户端。我在Rest API下遵循了这个规范和这个解释
但是很遗憾,我收到401,但无法进行身份验证。
这就是我所做的:
我创建了一个秘密“ 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
)
后来我生成了一个时间戳,现在是+ 1小时,所以我运行了nodejs:
Date.now()+1000*60*60; // output 1433895918506.
我使用我的秘密在该网站上生成了临时密码,并得到了结果0ca57806bdc696b3129d4cad83746945b00af77b
我将密码编码为base64。
现在,我试图登录与Web客户端使用临时用户名之交服务器进行通信:1433895918506:my_user_name
和密码MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==
,在网络客户端上,现在我用
"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.
您能帮我找出问题所在吗?
当我使用您的姓名和密码生成凭据时,我1Dj9XZ5fwvKS6YoQZOoORcFnXaI=
没有MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==
,请检查您的算法/代码是否有错误。
并且时间在Unix Timestamp中,所以以秒而不是毫秒为单位(尽管这不会影响,但只会使您的凭据永不过期)
检查您的系统和运行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
};
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句