【问题标题】:Is 'long-term credentials' authentication mechanism *required* for WebRTC to work with TURN servers?WebRTC 与 TURN 服务器一起工作是否需要“长期凭据”身份验证机制?
【发布时间】:2017-08-24 09:53:55
【问题描述】:

我打算使用 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 是否严格需要才能工作)
  • 如果需要,我可以只创建一组凭据并将其用于所有客户端吗? (客户端代码示例显然只是为了演示,但它似乎表明您可以将凭据硬编码到客户端代码中。如果这是不可能/推荐的,那么将适当的凭据传递给客户端的推荐方法是什么?客户端代码?)

【问题讨论】:

    标签: node.js html webrtc turn


    【解决方案1】:

    经过测试,似乎需要传递凭据才能使客户端代码正常工作(否则您会在控制台中收到错误消息)。

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

    解决方案

    打开 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
    

    来自网络应用 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 并不担心两个客户端同时使用相同的凭据获得分配。
    • TURN REST API 是 Coturn 支持的一种可能的解决方案,可以以最少的麻烦获得适当的安全性。

    【讨论】:

    • 如果您想提供 TURN 和 STUN 服务,您可能需要使用 cert 和 pkey 属性将域信任证书和私钥添加到配置文件中。
    • 上面的TURN REST API链接坏了,here是它的github链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2020-03-12
    • 2021-05-15
    • 2021-01-06
    • 2016-04-12
    相关资源
    最近更新 更多