2016-03-03 1 views
7

У меня есть coturn и запустить его успешно. IP: 192.168.1.111. Теперь вопрос, с которым я столкнулся, - получить учетные данные Turn через REST API. http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 В соответствии с проходом формат запрос должен бытьCoTURN: Как использовать API TURN REST?

GET /?service=turn&username=mbzrxpgjys

и реакция должна быть JSON. Теперь у меня вопрос:

a) Как настроить и команду TURN SERVER, чтобы он работал в режиме REST API?

b) Как написать http-запрос в правильном формате, так что TURN SERVER может ответить правильно? не могли бы вы привести мне пример?

ответ

13

Несколько вещей, чтобы уточнить здесь:

  • 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 
    } 
    ...