繁体   English   中英

使用REST API身份验证为WebRTC TURN服务器

[英]TURN server for WebRTC with REST API authentication

我正在尝试从这里为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功能,以避免通过网络发送密码或将其存储在客户端。 我在Rest API下遵循了这个规范这个解释

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

这就是我所做的:

  1. 我创建了一个秘密“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 

    (我刚刚用xx.xxx.xx.xx yy.yyy.yyy.yy zz.zzz.zz.zzz替换了IP地址)

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

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

    我在这个网站上生成了临时密码,使用我的秘密,得到了一个结果0ca57806bdc696b3129d4cad83746945b00af77b

  3. 我将密码编码为base64

  4. 现在我尝试使用临时用户名从Web客户端与转弯服务器进行通信: 1433895918506:my_user_name和密码: MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg== ,现在我在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.

你能帮我弄清楚什么是错的吗?

当我用您的名字和秘密生成凭证时,我得到1Dj9XZ5fwvKS6YoQZOoORcFnXaI= not MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg== ,检查您的算法/代码是否有错误。

并且时间在Unix时间戳中 ,所以以秒为单位而不是毫秒(尽管这不应该影响,但只是让您的凭据永不过期)

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

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
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM