我已经构建了coturn并成功运行了它。ip地址:192.168.1.111。现在我面临的问题是通过REST API获取Turn凭证。https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00根据段落,请求格式应为
GET /?service=turn&username=mbzrxpgjys
响应应该是JSON。现在我的问题是:
a)如何配置和命令TURN服务器,使其在REST API模式下运行?
b)如何编写正确格式的http请求,以便TURN SERVER能够正确回复?你能给我举个例子吗?
发布于 2016-03-03 16:48:38
这里需要澄清的几件事是:
GET /?service=turn&username=mbzrxpgjys返回一个JSON,它只是一个建议的 uri,用于从服务器检索time-limited TURN凭证,你不必遵循它,你的uri可以是/?giveMeCredentials。实际上,我使用套接字连接来检索此数据,而不是使用json响应进行直接http调用。总之,你(使用turn的客户端)如何获得这些凭证并不重要,只要它们是有效的。turnserver ... --use-auth-secret --static-auth-secret=MySecretKey :分隔的某个字符串(可以是随机的或用户id等),密码将是用户名的HMAC和您的密钥。下面是我对另一个question的回答中的一些示例代码
用于声明TURN server的命令:
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在应用服务器中创建TURN凭证的node.js代码:
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
}
...发布于 2019-02-17 00:18:13
在经历了(许多)小时的挫折之后,@Mido在这里出色的answer是唯一真正让CoTurn的REST API为我工作的东西。
我的证书服务器是PHP,我使用的是CoTurn的配置文件'turnserver.conf‘,所以这里是针对这种情况的Mido工作的经过测试和工作的翻译:
假设“共享密钥”为“3575819665154b268af59efedee8826e”,下面是相关的turnserver.conf条目:
lt-cred-mech
use-auth-secret
static-auth-secret=3575819665154b268af59efedee8826e...and的PHP (它误导了我很久):
$ttl = 24 * 3600; // Time to live
$time = time() + $ttl;
$username = $time . ':' . $user;
$password = base64_encode(hash_hmac('sha1', $username, '3575819665154b268af59efedee8826e', true));发布于 2020-06-06 22:44:27
基于@Mido和@HeyHeyJC answers,这里是为coturn构建凭据的Python实现。
import hashlib
import hmac
import base64
from time import time
user = 'your-arbitrary-username'
secret = 'this-is-the-secret-configured-for-coturn-server'
ttl = 24 * 3600 # Time to live
timestamp = int(time()) + ttl
username = str(timestamp) + ':' + user
dig = hmac.new(secret, username, hashlib.sha1).digest()
password = base64.b64encode(dig).decode()
print('username: %s' % username)
print('password: %s' % password)这是一个用于测试登录到coturn服务器的web application。使用turn:host.example.com作为服务器名称。
https://stackoverflow.com/questions/35766382
复制相似问题