Несколько вещей, чтобы уточнить здесь:
GET /?service=turn&username=mbzrxpgjys
, который возвращает JSON, просто предложил URI для получения ограниченных по времени Turn учетных данных с сервера, вы не должны следуйте за этим, ваш uri может быть только /?giveMeCredentials
. На самом деле, я использую мое подключение сокета для извлечения этих данных, а не прямой HTTP-вызов с json-ответом. В конце дня не имеет значения, как вы (клиент, который использует указанный TURN), получаете эти учетные данные, пока они действительны.
Вы не обращаетесь напрямую к серверу TURN, no rest api звонок на сервер TURN находится под вашим контролем.
Вы назначаете секретный ключ при запуске сервера TURN, это может быть взято из db (таким образом, динамически изменяемо), но ленив, что я просто закодирован и передал его в файле конфигурации очереди , также не забудьте включить REST API. В качестве части команды поворота turnserver ... --use-auth-secret --static-auth-secret=MySecretKey
Теперь на вашем сервере приложений вы должны использовать тот же секретный ключ для генерации учетных данных, для имени пользователя, это временная метка UNIX и некоторая строка (может быть случайной или идентификатор пользователя или что-то еще) разделенный на :
, и пароль будет HMAC имени пользователя с вашим секретным ключом.
о отметке времени UNIX, это время на сервере TURN, до которого ваши учетные данные должны быть действительными, поэтому, вычисляя это, убедитесь, что вы учитываете разницу в часах между сервером приложений и сервером очереди ,
Теперь некоторые примеры код взят из моего ответа на другие команды question
для постановки 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
}
...