NodeJS WebRTC与TURN服务器一起工作是否需要“长期凭证”认证机制?

9gm1akwq  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(176)

我打算用coturn -https://code.google.com/p/coturn/为WebRTC应用程序运行我自己的TURN服务。手册是这样描述身份验证和凭证的:

...

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

   ...

此客户端代码示例还建议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'
  // }
];
  • 他们总是被要求吗?(Coturn可以在没有任何授权机制的情况下运行,但从手册页中并不清楚它是否是WebRTC工作的严格必需
  • 如果需要,我可以只创建一组凭证并将其用于所有客户端吗?(客户端代码示例显然只是为了演示,但它似乎建议您可以将凭据硬编码到客户端代码中。如果这是不可能的/不推荐的,推荐什么方法来向客户端代码传递适当的凭据?)
n6lpvg4x

n6lpvg4x1#

经过测试,似乎需要传递凭据才能让客户端代码工作(否则您会在控制台中收到错误)。
在Codurn中启用“no-auth”选项(或同时保留lt-cred-mech和st-cred-mech注解),但仍然在应用程序JS中传递凭据也不起作用,因为TURN消息以某种方式使用密码凭据进行签名。如果运行在非认证模式下,可能Codurn不期望客户端发送认证细节,因此它不知道如何解释消息。

解决方案

打开lt-cred-mech并将用户名和密码硬编码到Codurn配置文件和应用程序的JS中,似乎可以工作。在Codurn配置文件中有注解掉的“静态用户”条目-使用普通密码格式而不是密钥格式。
Coturn配置(这是我使用的整个配置文件):

fingerprint
lt-cred-mech
#single static user details for long-term authentication:
user=username1:password1
#your domain here:
realm=mydomain.com

来自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
    }
];

显然,这并没有为TURN服务器提供实际的安全性,因为凭证对任何人都是可见的(因此任何人都可以使用它作为中继来消耗带宽和处理器时间)。

总结如下:

  • 是的,WebRTC需要长期身份验证才能使用TURN。
  • 是的,看起来您可以硬编码一组凭证供每个人使用-- coturn不会因为两个客户端使用相同的凭证同时获得分配而感到困扰。
  • 一种以最小麻烦实现适当安全的可能解决方案是Coturn支持的TURN REST API

相关问题