WebRTC是否需要"长期凭证"认证机制*才能与TURN服务器配合使用?

use*_*356 7 html5 node.js webrtc turn

我打算为一个WebRTC应用程序运行我自己的TURN服务 - https://code.google.com/p/coturn/.手册说明了身份验证和凭据:

   ...

   -a, --lt-cred-mech
          Use long-term credentials mechanism (this one you need for WebRTC usage).  This option can be used with
          either flat file user database or PostgreSQL DB or MySQL DB or MongoDB or Redis for user keys storage.

   ...
Run Code Online (Sandbox Code Playgroud)

此客户端代码示例还建议TURN需要凭据:

// use google's ice servers
var iceServers = [
  { url: 'stun:stun.l.google.com:19302' }
  // { url: 'turn:192.158.29.39:3478?transport=udp',
  //   credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
  //  username: '28224511:1379330808'
  // },
  // { url: 'turn:192.158.29.39:3478?transport=tcp',
  //   credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
  //   username: '28224511:1379330808'
  // }
];
Run Code Online (Sandbox Code Playgroud)
  • 他们总是需要吗?(可以在没有任何身份验证机制的情况下运行Coturn,但是从手册页中不清楚WebRTC 是否严格要求它工作)
  • 如果需要,我可以创建一组凭据并将其用于所有客户端吗?(客户端代码示例显然只是为了演示,但它似乎建议您可以将凭据硬编码到客户端代码中.如果这不可能/不推荐,那么将适当的凭据传递给客户代码?)

use*_*356 12

在测试之后,似乎需要传递凭据才能使客户端代码工作(否则在控制台中会出现错误).

保留在Coturn中启用"no-auth"选项(或者同时保留lt-cred-mech和st-cred-mech评论)但仍然在应用程序JS中传递凭据也不起作用,因为TURN消息以某种方式使用密码凭证.如果Coturn在非身份验证模式下运行,可能不希望客户端发送身份验证详细信息,因此它不知道如何解释这些消息.

打开lt-cred-mech并将用户名和密码硬编码到Coturn配置文件和应用程序的JS中似乎都能正常工作.在Coturn配置文件中注释掉了"静态用户"条目 - 使用普通密码格式而不是密钥格式.

Coturn配置(这是我使用它的整个配置文件):

fingerprint
lt-cred-mech
#single static user details for long-term authentication:
user=username1:password1
#your domain here:
realm=mydomain.com
Run Code Online (Sandbox Code Playgroud)

来自Web应用程序JS的ICE服务器列表:

var iceServers = [
    {
         url: 'turn:123.234.123.23:3478', //your TURN server address here
         credential: 'password1', //actual hardcoded value
         username: 'username1' //actual hardcoded value
    }
];
Run Code Online (Sandbox Code Playgroud)

显然,这不会为TURN服务器提供实际的安全性,因为任何人都可以看到凭据(因此任何人都可以使用它作为中继来消耗带宽和处理器时间).

综上所述:

  • 是的,WebRTC需要长期认证才能使用TURN.
  • 是的,似乎你可以硬编码一组凭证供所有人使用 - 但两个客户端使用相同的凭证同时获得分配并不困扰.
  • 一个可能的解决方案,以最小的麻烦适当的安全性将是一个TURN REST API,Coturn支持.