認証情報の生成
CloudflareはTURNキーを発行しますが、これらのキーはturn.cloudflare.comでの認証情報として使用することはできません。TURNを使用するには、有効期限付きのTTL値で認証情報を作成する必要があります。
TURN認証情報を作成するには、まずダッシュボード ↗またはAPIを使用してTURNキーを作成する必要があります。
TURNキーはサーバー側に保持するべきです(ブラウザやアプリと共有しないでください)。TURNキーは、TURNクライアント用の無制限の短命のTURN認証情報を生成するための長期的な秘密です。
TURNキーを使用すると、次のことができます:
- 有効期限付きのTURN認証情報を生成する
- 以前に発行されたTURN認証情報を取り消す
各TURNユーザーに対して短命の認証情報を生成する必要があります。認証情報を作成するには、TURNトークンIDとAPIトークンを使用して認証情報を生成するバックエンドサービスが必要です。次のようなAPI呼び出しを行います:
curl https://rtc.live.cloudflare.com/v1/turn/keys/$TURN_KEY_ID/credentials/generate \--header "Authorization: Bearer $TURN_KEY_API_TOKEN" \--header "Content-Type: application/json" \--data '{"ttl": 86400}'以下のJSONレスポンスは、フロントエンドアプリケーションに渡すことができます:
{ "iceServers": { "urls": [ "stun:stun.cloudflare.com:3478", "turn:turn.cloudflare.com:3478?transport=udp", "turn:turn.cloudflare.com:3478?transport=tcp", "turns:turn.cloudflare.com:5349?transport=tcp" ], "username": "bc91b63e2b5d759f8eb9f3b58062439e0a0e15893d76317d833265ad08d6631099ce7c7087caabb31ad3e1c386424e3e", "credential": "ebd71f1d3edbc2b0edae3cd5a6d82284aeb5c3b8fdaa9b8e3bf9cec683e0d45fe9f5b44e5145db3300f06c250a15b4a0" }}RTCPeerConnectionをインスタンス化する際には、次のようにusernameとcredentialを使用します:
const myPeerConnection = new RTCPeerConnection({ iceServers: [ { urls: [ "stun:stun.cloudflare.com:3478", "turn:turn.cloudflare.com:3478?transport=udp", "turn:turn.cloudflare.com:3478?transport=tcp", "turns:turn.cloudflare.com:5349?transport=tcp" ], username: "REPLACE_WITH_USERNAME", credential: "REPLACE_WITH_CREDENTIAL", }, ],});ttl値は、短命のキーが特定の時間内に期限切れになるように調整できます。この値は、ユーザーがTURNサービスを使用するのに期待される時間よりも大きくする必要があります。たとえば、ビデオ会議アプリでTURNを使用する場合、この値はアプリ内で発生する最長のビデオ通話に設定する必要があります。
WebRTCで短命のTURN認証情報を使用する場合、RTCPeerConnectionのsetConfiguration() ↗ APIを使用して、WebRTCセッション中に認証情報を更新できます。
短命の認証情報は、TTLが切れる前に次のようなAPI呼び出しで取り消すこともできます:
curl --request POST \https://rtc.live.cloudflare.com/v1/turn/keys/$TURN_KEY_ID/credentials/username/$USERNAME/revoke \--header "Authorization: Bearer $TURN_KEY_API_TOKEN"