我打算为一个带有coturn-
https://code.google.com/p/coturn/的WebRTC应用程序运行我自己的TURN服务.该手册说明了有关身份验证和凭据的信息:
此客户端代码示例还建议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',// username: '28224511:1379330808'
- // }
- ];
>他们总是需要吗? (可以在没有任何身份验证机制的情况下运行Coturn,但是从手册页中不清楚WebRTC是否严格要求它工作)
>如果需要,我可以创建一组凭据并将其用于所有客户端吗? (客户端代码示例显然只是为了演示,但它似乎建议您可以将凭据硬编码到客户端代码中.如果这不可能/不推荐,那么将适当的凭据传递给客户代码?)
解决方法
在测试之后,似乎需要传递凭据才能使客户端代码工作(否则在控制台中会出现错误).
保留在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
来自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.
>是的,似乎您只需硬编码一组凭据供所有人使用 – 但两个客户端使用相同的凭据同时获得分配并不困扰.
>一个可能的解决方案,以最小的麻烦获得适当的安全性将是一个TURN REST API,Coturn支持.