用于具有 REST API 身份验证的 WebRTC 的 TURN 服务器

2023-12-28

我正在尝试为 webRTC 设置 rfc5766-turn-server TURN 服务器here https://code.google.com/p/rfc5766-turn-server/。 我能够使用 TURN 服务器成功转发我的视频turnuserdb.conf文件,其中有我的用户名和密码(my_user_name:my_password)。 在网络客户端我使用:

"iceServers":{[
    "url": "turn:my_user_name,@turn_server_ip",
    "credential":"my_password"
}]

我尝试使用 TURN 服务器附带的 REST API 功能来避免通过网络发送密码或将其存储在客户端。 我跟着这个规格 https://datatracker.ietf.org/doc/html/draft-uberti-behave-turn-rest-00 and 这个解释 https://code.google.com/p/rfc5766-turn-server/wiki/turnserver在 Rest API 下

然而不幸的是我得到了401我无法验证。

这就是我所做的:

  1. 我创建了一个秘密“my_secret”,并像这样运行了转弯服务器:

    turnserver -v --syslog -a -L xx.xxx.xx.xx -X yy.yyy.yyy.yy -E zz.zzz.zz.zzz --max-bps=3000000 -f -m 3 --min-port=32355 --max-port=65535 --use-auth-secret --static-auth-secret=my_secret --realm=north.gov --cert=turn_server_cert.pem --pkey=turn_server_pkey.pem --log-file=stdout -q 100 -Q 300 --cipher-list=ALL
    

    (我刚刚将IP地址替换为xx.xxx.xx.xx yy.yyy.yyy.yy zz.zzz.zz.zzz)

  2. 后来我生成了一个时间戳,现在是+1小时,所以我在nodejs上运行:

    Date.now()+1000*60*60;      // output 1433895918506.
    

    我生成了临时密码这个网站 http://www.freeformatter.com/hmac-generator.html, 使用我的秘密,得到了结果0ca57806bdc696b3129d4cad83746945b00af77b

  3. 我将密码编码为base64.

  4. 现在我尝试使用临时用户名从 Web 客户端记录与 Turn 服务器的通信:1433895918506:my_user_name和密码:MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==,在网络客户端上我现在使用

    "iceServers":"url":"turn:1433895918506:my_user_name@turn_server_ip","credential":"MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg=="}]
    

但这不起作用,我得到:

401 user <1433895918506:my_user_name>  incoming packet message processed, error 401: Unauthorised.

你能帮我找出问题所在吗?


当我用你的名字和秘密生成凭证时,我得到了1Dj9XZ5fwvKS6YoQZOoORcFnXaI= not MGNhNTc4MDZiZGM2OTZiMzEyOWQ0Y2FkODM3NDY5NDViMDBhZjc3Yg==,检查您的算法/代码是否有错误。

时间是在Unix时间戳,所以以秒为单位,而不是像您那样以毫秒为单位(尽管这不会影响,但只会使您的凭据永不过期)

检查您的系统和运行 TURN 服务器的系统,时钟是否同步(至少不是相隔几天),一般来说,为了避免时钟不同步的问题,最好使用 ttl 为 24 小时,所以您的时间戳:

timestamp=  parseInt(Date.now()/1000) + 24*3600

生成TURN凭证的代码:

var crypto = require('crypto');

function getTURNCredentials(name, secret){    

    var unixTimeStamp = parseInt(Date.now()/1000) + 24*3600,
        username = [unixTimeStamp, name].join(':'),
        password,
        hmac = crypto.createHmac('sha1', secret);
    hmac.setEncoding('base64');
    hmac.write(username);
    hmac.end();
    password = hmac.read();
    return {
        username: username,
        password: password
    };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于具有 REST API 身份验证的 WebRTC 的 TURN 服务器 的相关文章

随机推荐

  • 自动化无聊的事情 - 硬币翻转条纹

    我知道现在有很多关于它的问题 即使是同一个问题 但我想我尝试了一些不同的方法 任务是收集 10 000 个样本 每个样本 100 次翻转 然后计算所有样本中出现 6 次正面或反面连续出现的概率 据我所知 但在之前的问题中 编码问题被描述得有
  • Genymotion Android 模拟器 - adb 访问?

    我下载了适用于 Oracle VirtualBox 的 Genymotion Android 模拟器 http www genymotion com http www genymotion com 在我的 Windows 7 PC 上 使用
  • 如何从 web.config 读取系统值并在 ASP.NET MVC C# 方法中使用

    我正在开发一个 ASP NET MVC3 Web 应用程序 不是我编写的 其最大上传大小为 100MB 现在 此 Web 应用程序已安装在客户的服务器计算机上 因此如果可以为每个客户配置此值最大上传大小 那就太好了 如果需要 他们可以编辑
  • 如何使用 AngularJS 在 ASP MVC 中重定向页面?

    我经历了启动新的 ASP NET MVC 无用户身份验证过程的过程 并且已经开始将 AngularJS 与 C 代码集成 My ViewStart cshtml uses Layout cshtml to RenderBody 对于在 视图
  • SQL Server 中有用的系统存储过程

    我最近发现我可以使用sp help获得表定义并从那时起就一直迷恋它 在我发现之前 我必须在 SQL Management studio 中打开对象资源管理器 手动搜索表名称 右键单击表并选择设计 那真是费了很大的力气 你们都使用了哪些其他无
  • 通用类型转换方法(.Net)

    我正在尝试创建一个通用方法来投射对象 但似乎无法破解这个栗子 今天是周五下午 3 点 这是漫长的一周 好的 所以我有这样的场景 We have a value which net sets as a double by default ob
  • 创建新的远程分支时出现有趣的引用名称错误

    所以我在 github 上建立了一个项目 一切都很顺利 现在我想创建一个新分支 这是我所做的 创建了一个新的本地分支机构 将新分支推送到github 问题是这样的 在推送到遥控器期间 我收到此错误 Repository ssh email
  • Highcharts:隐藏和显示图例

    我希望能够在用户单击按钮时切换图表图例的可见性 我尝试过使用未记录的内容来隐藏图例destroy 方法 但是当我尝试重新渲染图例及其项目时 这些项目出现在图表的左上角而不是图例内 这些项目似乎也没有附加任何事件处理程序 单击项目不再切换系列
  • 重命名目录中列表中的单个文件

    请原谅我的编程无知 这就是你们天才存在的原因 我想通过计划任务每 30 分钟重命名一个文件 文件列表 测试1 txt 测试2 txt 测试3 txt 等等 进入 测试 txt 测试2 txt 文本3 txt 等等 test txt 将被程序
  • 乌克兰语字母的正则表达式。如何用大写字母分隔西里尔字母?

    我有一个字符串 里面有一些西里尔字母 每个都以大写字母开头 var str 我找到了这个解决方案str match g 但它让我回归 代替 似乎它不能识别乌克兰字母 只能识别俄语 那么 我该如何更改该正则表达式以包含乌克兰字母 不是西里尔字
  • 如果列内的值非空,则在 pandas 中创建一个新的派生列

    我的输入数据是这样的 SL NO Name 1 KING BATA 2 3 4 AGS 5 FORMULA GROWTH 6 7 Bag Output SL NO Name Value 1 KING BATA Present 2 Not P
  • 数组或切片的多重赋值

    在 Go 中是否可以将数组解包为多个变量 就像在 Python 中一样 例如 var arr 4 string 4 string X Y Z W x y z w arr 我发现 Go 不支持这个 我可以做些什么来避免写作x y z w ar
  • 如何在 Linux 上的 java 应用程序中使用数字键盘箭头

    数字键盘上的箭头键不适用于 Linux 上的 Java 应用程序 奇怪的是 Home End PgUp PgDn Ins Del 都可以工作 当使用 Intellij 进行编程时 这一点尤其令人烦恼 如何让箭头键发挥作用 IntelliJ
  • ReactJS 应用程序的集成/验收测试

    我已阅读有关 Jest 的文档 然而 这似乎意味着对各个组件进行单元测试 如何测试组件的集成 或者验收测试使用 React JS 使用 Flux 编写的 Web 应用程序的一项功能 例如 测试电子商务 React 应用程序中的结账流程 用户
  • 如何使用带有 groovy 闭包的构造函数参数实例化 Java 抽象类

    我正在尝试从我的 Groovy 代码实例化一个 Java 抽象类 考虑以下 Java 抽象类 从类中剥离非相关处理 public abstract class StackOverflow public abstract String ans
  • 存储调查数据的最佳方式?

    我正在开发一个非常小的调查应用程序 可能有 3 4 页的 Web 应用程序 所以我的问题是保存调查数据的最佳方法是什么 顺便说一句 到目前为止我已经想出了以下方法 保存到数据库并将每个调查标记为不完整 当用户提交最后一份调查表格时 检查调查
  • 收集信用卡信息 - 并非收取付款

    我正在 Linux 服务器上使用 PHP 和 MySQL 进行工作 我有一个要求 我试图说服他们 从用户那里收集信用卡信息 以便我们公司可以使用卡号来保留酒店房间参加会议 我们根本不会自己给卡充值 而是将其发送到酒店 然后 我需要能够下载
  • 参数的默认值在 SSRS 2008 R2 中不起作用

    我有一个报告 BIDS SSRS 2008 R2 其中有一个参数 允许用户从列表 比如说销售区域 中选择多个值 不过 由于列表很长 大约有 15 个可能的值 我希望默认选择最常用的 2 个值 我在 参数属性 gt gt 默认值 对话框中进行
  • C# 通过句柄 (hWnd) 32 和 64 位获取路径/文件名

    我得到以下代码来通过句柄获取路径 文件名 DllImport user32 dll CharSet CharSet Auto SetLastError true private static extern int GetWindowThre
  • 用于具有 REST API 身份验证的 WebRTC 的 TURN 服务器

    我正在尝试为 webRTC 设置 rfc5766 turn server TURN 服务器here https code google com p rfc5766 turn server 我能够使用 TURN 服务器成功转发我的视频turn