turnserver (coturn + redis) 配置ICE server 临时用户密码【实践】

2023-05-16

背景

前端连接turn服务时一般都需要设置账号密码,由于都是在js中配置的,长期凭据相对临时用户安全性会差很多,本文通过程序生成临时的账号密码,把临时凭据设置到Redis中,turn服务验证的时候直接对比Redis中的账号密码,当Redis中key过期时,turnserver返回Unauthorized校验不通过。

本文用到docker、Redis,需要提前准备好

安装参考:Filebeat+Redis+Logstash+Elasticsearch+Kibana搭建日志采集分析系统_殷长庆的博客-CSDN博客_kibana7.17 采集通道

配置参考:

turnserver配置

coturn/turnserver.conf at master · coturn/coturn · GitHub

ice测试地址:

Trickle ICE 

配置

coturn安装

使用docker安装比较方便

docker search coturn

docker pull coturn/coturn

coturn配置

新建/home/turnserver.conf文件

cd /home

touch turnserver.conf

编辑文件内容,我的服务器是云服务器,服务商提供了公网、私网IP

# TURN server name and realm
realm=公网IP
server-name=turnserver

# Use fingerprint in TURN message
fingerprint

# IPs the TURN server listens to
listening-ip=私网IP

relay-ip=私网IP

# External IP-Address of the TURN server
external-ip=公网IP

# Main listening port
listening-port=3478

# Further ports that are open for communication
min-port=49152
max-port=65535

# Log file path
log-file=/var/log/turnserver.log

# Enable verbose logging
verbose

# Specify the user for the TURN authentification
user=test:test123

# Enable long-term credential mechanism
lt-cred-mech

redis-userdb="ip=私网IP dbname=11 password=redis_pwd connect_timeout=30"

 其中redis-userdb的配置就是让coturn链接到redis

启动coturn

docker run -d --network=host -v $(pwd)/turnserver.conf:/etc/coturn/turnserver.conf coturn/coturn

coturn 添加账户

docker exec -it 容器号 /bin/bash

### 进入容器之后执行,创建一个mytest:mytest123的账号,创建完成后可以在redis中查看到

turnadmin -a -N "host=私网IP dbname=11 password=redis_pwd" -u mytest -r 公网IP -p mytest123

测试连接

这时候可以使用test:test123连接到coturn,如果不成功需要检查IP是否配置正确,服务器组策略是否开启了3478/udp

Java生成临时用户 

临时用户在Redis中的key-value规则

key

turn/realm/{realm}/user/{username}/key

实际的样子可能是

turn/realm/xxx.xxx.xxx/user/mytest/key 

value 

md5(username + ":" + realm + ":" + password)

实际样子是32位的MD5签名

生成完成之后设置到Redis中,给key设置一个过期时间即可,注意设置的dbindex要和coturn配置的保持一致。

测试临时用户 

使用生成的临时账户登录 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

turnserver (coturn + redis) 配置ICE server 临时用户密码【实践】 的相关文章

  • Electron 构建应用程序无法启动 Express 服务器

    我正在构建一个应用程序 当我处于开发人员模式时一切正常 每件事都按其应有的方式运作 但是 当我使用电子构建器打包我的应用程序时 应用程序会打开 但它不会启动快速服务器 并且应用程序无法正常工作 这是我的 package json 代码 na
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • redis-cli 重定向到 127.0.0.1

    我在PC1上启动Redis集群 然后在PC2上连接它 当需要重定向到另一个集群节点时 它会显示Redirected to slot 7785 located at 127 0 0 1 但应该显示Redirected to slot 7785
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • redis 阻塞直到 key 存在

    我是 Redis 新手 想知道是否有办法能够await get通过它的键来获取值 直到该键存在 最小代码 async def handler data await self fetch key async def fetch key ret
  • 错误:在 Google 应用引擎上部署节点 js 时找不到模块“/workspace/server.js”

    经过一周的搜索 我无法找到适用于我的 Node js 应用程序的应用程序引擎部署问题的解决方案 我已经用这个替换了原来的代码Express 的 hello world 示例 https expressjs com en starter he
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • jinja2.exceptions.TemplateNotFound:index.html

    我尝试使用 Flask 打开 index html run py from app import app app run debug True init py from flask import Flask app Flask name f
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 保存到服务器后,隐藏字符“\u0”添加到文件中

    我正在使用 Apache 服务器为 Web 开发网站提供服务 这样我就可以不断保存和编辑文件 我使用 Gulp for Sass 来连接和丑化 css 和 js 文件 一个月前 我的 js 和 css 文件遇到问题 似乎在文件下面添加了随机
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • 数据包无序。得到:80 预期:0 node.js

    这是我的 非常简单 代码 var connection mysql createConnection infosDB connection connect connection query SELECT FROM action functi
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • 在 Redis 上为 Django 和 Express.js 应用程序共享会话存储

    我想创建一个包含一些登录用户的 Django 应用程序 另一方面 由于我想要一些实时功能 所以我想使用 Express js 应用程序 现在的问题是 我不希望身份不明的用户访问 Express js 应用程序的日期 因此 我必须在 Expr
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客

随机推荐