用于具有 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 服务器 的相关文章

  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • appendChild 错误:无法在层次结构中的指定点插入节点

    There is an error with the function appendChild Node cannot be inserted at the specified point in the hierarchy JS var a
  • 如何使用 JavaScript 刷新页面?

    如何使用 JavaScript 刷新页面 Use location reload https developer mozilla org en US docs Web API Location reload 例如 每当元素带有以下内容时重新
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • Rails、REST 架构和 HTML 5:带有预检请求的跨域请求

    在致力于使我们的网站 HTML 5 友好的项目时 我们渴望采用跨域请求的新方法 不再通过隐藏的 iframe 发布 使用访问控制 http www w3 org TR access control 根据规范 我们开始设置一些测试来验证各种浏
  • jQuery UI Datepicker 奇怪的行为

    我在使用 jqueryUI 使用简单的日期选择器时遇到了一个奇怪的问题 我只想显示两个月的日历 包括上个月和当前月份 我使用了这段代码 function picker datepicker numberOfMonths 2 showCurr
  • Dialogflow Fulfillment Webhook 调用失败

    I am new to dialogflow fulfillment and I am trying to retrieve news from news API based on user questions I followed doc
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 自调用函数未定义

    如果我声明一个函数文字 var x function alert hi console log x returns the function code However var x function alert hi console log
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 使 Bootstrap Popover 在悬停而不是单击时出现/消失

    我正在使用 Bootstrap 构建一个网站Popover http twitter github com bootstrap javascript html popovers我不知道如何使弹出窗口出现在悬停而不是单击时 我想做的就是当有人
  • 如何使用 jQuery 单击特定链接时打开引导导航选项卡的特定选项卡?

    我是 jquery 和 bootstrap 的新手 所以请考虑我的错误 我已经创建了一个用于登录和注册的 bootstrap 模式 它包含两个导航选项卡 称为登录和注册 我有两个按钮可以弹出相同的模态窗口 但在模态窗口内显示不同的选项卡 每
  • for循环中需要声明变量吗?

    有什么区别 for var i 0 i lt 5 i for i 0 i lt 5 i 是否有必要包含 var 关键字 我知道 var 关键字会影响变量范围 但我无法理解是否有必要在 for 循环中包含该关键字 在第二个示例中 您的变量是全
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 游戏中心邀请处理程序,它属于哪里?

    我已经搜索了该网站并发现了这个 GameCenter 邀请处理程序 https stackoverflow com questions 4639284 gamecenter invitation handler He says 正如文档中所
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字

随机推荐

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

    我知道现在有很多关于它的问题 即使是同一个问题 但我想我尝试了一些不同的方法 任务是收集 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