首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoTURN:如何使用TURN REST API?

CoTURN:如何使用TURN REST API?
EN

Stack Overflow用户
提问于 2016-03-03 16:01:58
回答 7查看 22.2K关注 0票数 37

我已经构建了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能够正确回复?你能给我举个例子吗?

EN

回答 7

Stack Overflow用户

发布于 2016-03-03 16:48:38

这里需要澄清的几件事是:

  • GET /?service=turn&username=mbzrxpgjys返回一个JSON,它只是一个建议的 uri,用于从服务器检索time-limited TURN凭证,你不必遵循它,你的uri可以是/?giveMeCredentials。实际上,我使用套接字连接来检索此数据,而不是使用json响应进行直接http调用。总之,你(使用turn的客户端)如何获得这些凭证并不重要,只要它们是有效的。
  • 你不要直接向TURN服务器发出任何请求,no REST api调用TURN服务器是在你的控制之下。
  • 当你启动TURN服务器时,你会分配一个密钥,这个密钥可以从数据库中获取(因此是动态变化的),但懒惰的是我,只是硬编码,并在turn配置文件中给出了它,还记得要启用rest API。作为turn命令的一部分,turnserver ... --use-auth-secret --static-auth-secret=MySecretKey
  • 现在,在您的应用程序服务器中,您将使用相同的密钥来生成凭据,对于用户名,它是UNIX时间戳和由:分隔的某个字符串(可以是随机的或用户id等),密码将是用户名的HMAC和您的密钥。
  • 关于UNIX时间戳,这是您的凭据必须在其之前有效的轮流服务器时间,因此在计算此时间戳时,请确保将应用程序服务器和TURN服务器之间的时钟时差考虑在内。

下面是我对另一个question的回答中的一些示例代码

用于声明TURN server的命令:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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
    };
}

使用以下代码的浏览器代码:

代码语言:javascript
复制
  ...
  iceServers:[
    {
      urls: "turn:turn_server_ip",
      username: username,
      credential:password
    }
  ...
票数 66
EN

Stack Overflow用户

发布于 2019-02-17 00:18:13

在经历了(许多)小时的挫折之后,@Mido在这里出色的answer是唯一真正让CoTurn的REST API为我工作的东西。

我的证书服务器是PHP,我使用的是CoTurn的配置文件'turnserver.conf‘,所以这里是针对这种情况的Mido工作的经过测试和工作的翻译:

假设“共享密钥”为“3575819665154b268af59efedee8826e”,下面是相关的turnserver.conf条目:

代码语言:javascript
复制
lt-cred-mech
use-auth-secret
static-auth-secret=3575819665154b268af59efedee8826e

...and的PHP (它误导了我很久):

代码语言:javascript
复制
$ttl = 24 * 3600;  // Time to live
$time = time() + $ttl;
$username = $time . ':' . $user;
$password = base64_encode(hash_hmac('sha1', $username, '3575819665154b268af59efedee8826e', true));
票数 9
EN

Stack Overflow用户

发布于 2020-06-06 22:44:27

基于@Mido和@HeyHeyJC answers,这里是为coturn构建凭据的Python实现。

代码语言:javascript
复制
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作为服务器名称。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35766382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档