2016-03-03 25 views
7

Tôi đã xây dựng coturn và chạy thành công. ip: 192.168.1.111. Bây giờ câu hỏi tôi phải đối mặt là nhận chứng chỉ Turn thông qua REST API. http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 Theo đoạn văn định dạng yêu cầu nênCoTURN: Cách sử dụng API REST TURN?

GET /?service=turn&username=mbzrxpgjys

và phản ứng nên JSON. Bây giờ câu hỏi của tôi là:

a) Làm thế nào để cấu hình và lệnh TURN SERVER để làm cho nó chạy trong chế độ REST API?

b) Cách viết yêu cầu http ở đúng định dạng để TURN SERVER có thể trả lời chính xác? Ông có thể cho tôi một ví dụ?

Trả lời

13

Vài điều cần được làm rõ ở đây là:

  • GET /?service=turn&username=mbzrxpgjys mà trả về một JSON, chỉ là một gợi ý uri để lấy giới hạn thời gian thông tin chuyển từ máy chủ, bạn không cần phải theo đó, uri của bạn có thể chỉ là /?giveMeCredentials. Trong thực tế, tôi sử dụng kết nối socket của tôi để lấy dữ liệu này, chứ không phải cuộc gọi http trực tiếp với đáp ứng json. Cuối ngày, nó không quan trọng như thế nào bạn (khách hàng sử dụng nói TURN) có được những thông tin miễn là họ có giá trị.

  • Bạn không thực hiện bất kỳ yêu cầu nào đến máy chủ TURN trực tiếp, không nghỉ ngơi api gọi tới máy chủ TURN đang nằm trong tầm kiểm soát của bạn.

  • bạn phân bổ khóa bí mật khi bạn khởi động máy chủ TURN, điều này có thể được lấy từ một db (do đó có thể thay đổi động), nhưng lười biếng mà tôi, chỉ cần mã hóa cứng và đưa nó vào tệp cấu hình lần lượt , cũng nhớ bật REST API. Là một phần của lệnh rẽ, turnserver ... --use-auth-secret --static-auth-secret=MySecretKey

  • Bây giờ, trong cùng một khóa bí mật để tạo thông tin xác thực, tên người dùng, dấu thời gian UNIX và một số chuỗi (có thể là ngẫu nhiên hoặc id người dùng hoặc một cái gì đó) được phân tách bởi : và mật khẩu sẽ là HMAC của tên người dùng với khóa bí mật của bạn.

  • về dấu thời gian UNIX, đây là thời gian trong máy chủ TURN cho đến khi thông tin đăng nhập của bạn hợp lệ, do đó việc tính toán này đảm bảo bạn xem xét sự khác biệt về thời gian đồng hồ giữa máy chủ ứng dụng và máy chủ lượt của bạn .

Bây giờ một số mẫu mã lấy từ câu trả lời của tôi đến một lệnh question

cho nêu LƯỢT server:

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 mã cho việc tạo ra thông tin biến trong ứng dụng máy chủ:

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 
    }; 
} 

Mã trình duyệt để sử dụng:

... 
    iceServers:[ 
    { 
     urls: "turn:turn_server_ip", 
     username: username, 
     credential:password 
    } 
    ... 
Các vấn đề liên quan