我已经构建了 coturn 并成功运行它。 ip:192.168.1.111。现在我面临的问题是通过REST API获取Turn凭证。https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00 https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00根据该段落,请求格式应该是
GET /?service=turn&username=mbzrxpgjys
和回应应该是JSON
。现在我的问题是:
a) 如何配置和命令TURN SERVER使其运行在REST API
mode?
b) 如何以正确的格式编写http请求TURN SERVER
能正确回复吗?你能给我举个例子吗?
这里需要澄清的几点是:
GET /?service=turn&username=mbzrxpgjys
它返回一个 JSON,只是一个建议用于检索的 uri有时间限制的来自服务器的 TURN 凭据,您不必遵循这一点,您的 uri 可以只是/?giveMeCredentials
。事实上,我使用套接字连接来检索此数据,而不是使用 json 响应直接进行 http 调用。归根结底,只要这些凭证有效,您(使用所述 TURN 的客户端)如何获取这些凭证并不重要。
您不直接向 TURN 服务器发出任何请求,没有休息 API对 TURN 服务器的调用由您控制。
你在启动TURN服务器时分配一个密钥,这可以从数据库中获取(因此可以动态更改),但是我很懒,只是硬编码,并在turn配置文件中给出了它,还记得启用休息 API。作为转弯命令的一部分,turnserver ... --use-auth-secret --static-auth-secret=MySecretKey
现在,在您的应用程序服务器中,您将使用相同的密钥来生成凭据,对于用户名,它是 UNIX 时间戳和一些字符串(可以是随机的或用户 ID 或其他内容),由:
密码将是用户名的 HMAC 和您的密钥。
关于 UNIX 时间戳,这是 TURN 服务器中的时间,在此之前您的凭据必须有效,因此计算此时间可确保您考虑到应用程序服务器和 Turn 服务器之间的时钟时间差。
现在一些示例代码取自我对另一个问题的回答question https://stackoverflow.com/q/30745153/3074768
用于声明 TURN 服务器的命令:
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
node.js
在应用程序服务器中创建 TURN 凭证的代码:
var crypto = require('crypto');
function getTURNCredentials(name, secret){
var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600, // this credential would be valid for the next 24 hours
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
};
}
使用此功能的浏览器代码:
...
iceServers:[
{
urls: "turn:turn_server_ip",
username: username,
credential:password
}
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)