Cloudflare 会发放 TURN 密钥,但这些密钥不能直接用作 turn.cloudflare.com 的凭据。要使用 TURN,您需要创建具有过期 TTL 值的凭据。
要创建 TURN 凭据,您首先需要使用仪表板 ↗或 API 创建一个 TURN 密钥。
您应该在服务器端保管您的 TURN 密钥(请勿将其共享给浏览器/应用程序)。TURN 密钥是一个长期密钥,它允许您为 TURN 客户端生成无限数量的、寿命较短的 TURN 凭据。
通过 TURN 密钥,您可以:
- 生成会过期的 TURN 凭据
- 撤销以前发放的 TURN 凭据
您应该为每个 TURN 用户生成短期凭据。为了创建凭据,您应该拥有一个后端服务,该服务使用您的 TURN 令牌 (Token) ID 和 API 令牌来生成凭据。它将发起如下所示的 API 调用:
curl https://rtc.live.cloudflare.com/v1/turn/keys/$TURN_KEY_ID/credentials/generate-ice-servers \
--header "Authorization: Bearer $TURN_KEY_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{"ttl": 86400}'然后可以将如下所示的 201 (Created) 响应传递给您的前端应用程序:
{
"iceServers": [
{
"urls": [
"stun:stun.cloudflare.com:3478",
"stun:stun.cloudflare.com:53"
]
},
{
"urls": [
"turn:turn.cloudflare.com:3478?transport=udp",
"turn:turn.cloudflare.com:53?transport=udp",
"turn:turn.cloudflare.com:3478?transport=tcp",
"turn:turn.cloudflare.com:80?transport=tcp",
"turns:turn.cloudflare.com:5349?transport=tcp",
"turns:turn.cloudflare.com:443?transport=tcp"
],
"username": "bc91b63e2b5d759f8eb9f3b58062439e0a0e15893d76317d833265ad08d6631099ce7c7087caabb31ad3e1c386424e3e",
"credential": "ebd71f1d3edbc2b0edae3cd5a6d82284aeb5c3b8fdaa9b8e3bf9cec683e0d45fe9f5b44e5145db3300f06c250a15b4a0"
}
]
}在实例化 RTCPeerConnection 时按如下方式使用 iceServers:
const myPeerConnection = new RTCPeerConnection({
iceServers: [
{
urls: [
"stun:stun.cloudflare.com:3478",
"stun:stun.cloudflare.com:53"
]
},
{
urls: [
"turn:turn.cloudflare.com:3478?transport=udp",
"turn:turn.cloudflare.com:53?transport=udp",
"turn:turn.cloudflare.com:3478?transport=tcp",
"turn:turn.cloudflare.com:80?transport=tcp",
"turns:turn.cloudflare.com:5349?transport=tcp",
"turns:turn.cloudflare.com:443?transport=tcp"
],
"username": "bc91b63e2b5d759f8eb9f3b58062439e0a0e15893d76317d833265ad08d6631099ce7c7087caabb31ad3e1c386424e3e",
"credential": "ebd71f1d3edbc2b0edae3cd5a6d82284aeb5c3b8fdaa9b8e3bf9cec683e0d45fe9f5b44e5145db3300f06c250a15b4a0"
},
],
});ttl 值可以进行调整,以在特定时间后使短期密钥占用时间过期。此值应大于您预期用户使用 TURN 服务的时间。例如,如果您在视频会议应用中使用 TURN,则该值应设置为您预期该应用中可能发生的最长视频通话时间。
当在 WebRTC 中使用短期 TURN 凭据时,可以在 WebRTC 会话期间使用 RTCPeerConnection 的 setConfiguration() ↗ API 来刷新凭据。
在短期凭据的 TTL 到期之前,也可以通过如下 API 调用将其撤销:
curl --request POST \
https://rtc.live.cloudflare.com/v1/turn/keys/$TURN_KEY_ID/credentials/$USERNAME/revoke \
--header "Authorization: Bearer $TURN_KEY_API_TOKEN"如果凭据被成功撤销,将返回 204 (No Content) 响应。