Cloudflare は TURN キーを発行しますが、このキーを turn.cloudflare.com の認証情報としては使えません。TURN を使うには、有効期限(TTL)付きの認証情報を作成する必要があります。
TURN の認証情報を作るには、先に ダッシュボード ↗、または API で 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"
]
},
{
"urls": [
"turn:turn.cloudflare.com:3478?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"
]
},
{
urls: [
"turn:turn.cloudflare.com:3478?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 を使うなら、アプリで想定する最長のビデオ通話時間に設定します。
有効期限の短い TURN 認証情報を WebRTC で使う場合、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) が返ります。