ここで明確にする必要があるのは、次のとおりです。
GET /?service=turn&username=mbzrxpgjys
これは JSON を返します。サーバーから期限付きのTURN 資格情報を取得するための推奨URI にすぎません。それに従う必要はありません。URI は. 実際、私はソケット接続を使用してこのデータを取得していますが、json 応答で直接 http 呼び出しを行うのではありません。一日の終わりに、それらの資格情報が有効である限り、あなた (上記の TURN を使用するクライアント) がそれらの資格情報を取得する方法は問題ではありません。/?giveMeCredentials
TURN サーバーに直接リクエストを行うことはありません。TURN サーバーへの残りの API呼び出しは制御できません。
TURNサーバーを起動するときに秘密鍵を割り当てます。これはdbから取得できます(したがって動的に変更可能です)が、私は怠け者で、ハードコードされているだけで、ターン構成ファイルでそれを与えました。有効にすることも忘れないでください残りの API。ターンコマンドの一部として、turnserver ... --use-auth-secret --static-auth-secret=MySecretKey
ここで、アプリケーションサーバーで同じ秘密鍵を使用して資格情報を生成します。ユーザー名については、UNIX タイムスタンプといくつかの文字列 (ランダムまたはユーザー ID など) で区切られ:
、パスワードはユーザー名の HMAC です。あなたの秘密鍵。
UNIX タイムスタンプについては、資格情報が有効になるまでの TURN サーバーの時間であるため、これを計算するには、アプリケーション サーバーとターン サーバーの間のクロック時間の差を考慮してください。
別の質問に対する私の回答から取られたサンプルコード
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
}
...