手动将TURN用户(Coturn)插入数据库

时间:2016-08-06 06:14:37

标签: stun turn coturn

我正在尝试使用Coturn为项目设置TURN服务器,但我发现文档最多是粗略的......

我意识到有一个turnadmin工具会为你做这个,但我更希望直接在我的数据库上运行查询。这是一个可能包含许多用户的应用,其共享密钥(hmackey中的turnusers_lt)可能会发生变化(为了不与应用共享密码,应用使用'假'密码,这是一个某些易失性用户参数的哈希值并非如此秘密。)

我可以从缺乏的文档中收集hmackey使用领域,用户名和密码计算:

$ turnadmin -k -u myusername -r my.realm.org -p my-password
> e.g. 0x7a69b0e2b747a4560045f79d171b78c0

鉴于我的代码将知道这三个参数,我如何构建hmac哈希?例如。在PHP我有

string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )

$algo这里应该是SHA1,但$data(例如用户/通行证的联合)和$key(例如领域)会有什么价值?

还有一个turn_secret表列出了一个领域的'值',我猜这应该在上面的例子中用作$key,但添加和修改密钥仍然会给出相同的我打电话给turnadmin的结果。

基本上,我想做的是(伪代码):

// user registers
// pseudo-code, this is of course computed using php's password_hash function
$hashed_pw = hash($pw);
$db->query('insert into usertable (name, pass) values ($name, $hashed_pw)');

// this is implemented somewhere...
$coturn_pw = get_secret_hash($name);

// this needs implementing...
$HAMC = calc_hmac($name, $coturn_pw, 'my.realm.com');

$turndb->query('insert into turnusers_lt values (...)');

// on update, delete also update turnusers_lt

...然后在客户端,我现在应该可以使用$name$coturn_pw作为my.realm.com的凭据连接到TURN服务器。

或者我是否过度思考这个问题,我应该只为我的应用程序使用通用用户,硬编码密码并让Coturn找出谁在与谁交谈?

2 个答案:

答案 0 :(得分:1)

RFC 5389

中介绍了如何构建HMAC密钥
  

key = MD5(用户名":"领域":" SASLprep(密码))

     

其中MD5在RFC 1321中定义,SASLprep()在RFC 4013中定义

您需要更新的唯一表格是turnusers_ltturn_secret表和SHA1算法用于生成time-limited credentials

INSERT INTO turnusers_lt (realm, name, hmackey) VALUES (:realm, :username, :key);

当然,使用预准备语句而不是手动构建SQL字符串。

答案 1 :(得分:0)

橙色狗的答案是正确的。

使用node.js:

cat