2016-03-03 115 views
7

我建立了coturn併成功運行它。 IP:192.168.1.111。現在我面臨的問題是通過REST API獲取Turn證書。 http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00根據該通道的請求格式應該是CoTURN:如何使用TURN REST API?

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。實際上,我使用套接字連接來檢索這些數據,而不是直接使用json響應進行http調用。一天結束時,無論您(使用TURN的客戶)如何獲得這些憑證,只要它們有效即可。

  • 您不直接向TURN服務器發出任何請求,沒有休息api調用TURN服務器在您的控制之下。

  • 當你啓動TURN服務器時,你可以分配一個密鑰,這可以從一個數據庫中獲取(因此可動態變化),但是我只是懶編碼,並且在轉發配置文件中給它,還請記住啓用REST API。由於轉命令的一部分,現在turnserver ... --use-auth-secret --static-auth-secret=MySecretKey

  • ,在你的應用服務器,你可以使用相同的密鑰生成憑證,用戶名,這是UNIX時間戳和一些字符串(可以是隨機的或用戶ID或東西)與:分開,密碼將是用戶名和密鑰的HMAC。

  • 關於UNIX時間戳,這是TURN服務器中的時間,直到您的憑證必須有效,因此計算這個時候確保您考慮應用服務器和輪到服務器之間的時鐘時間差異。

現在從我的答案帶到另一個question

命令說明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 
    }; 
} 

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憑證代碼

使用此的瀏覽器代碼:

... 
    iceServers:[ 
    { 
     urls: "turn:turn_server_ip", 
     username: username, 
     credential:password 
    } 
    ...