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