我正在尝试使用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找出谁在与谁交谈?
答案 0 :(得分:1)
key = MD5(用户名":"领域":" SASLprep(密码))
您需要更新的唯一表格是turnusers_lt
。 turn_secret
表和SHA1算法用于生成time-limited credentials。
INSERT INTO turnusers_lt (realm, name, hmackey) VALUES (:realm, :username, :key);
当然,使用预准备语句而不是手动构建SQL字符串。
答案 1 :(得分:0)
橙色狗的答案是正确的。
使用node.js:
cat