本文主要是介绍emq-redis认证小坑总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
了解了 Mysql 插件认证及访问控制后,现在我们再来了解下 Redis 插件认证以及访问控制,默认关闭了匿名认证及鉴权行为
一、创建用户表和控制表
根据官方文档
-
创建用户表的命令为:hset mqtt_user: password
hset mqtt_user: password
127.0.0.1:6379> hset mqtt_user:admin password 123456
- 1
-
创建控制表的命令为:hset mqtt_acl:
hset mqtt_acl:
hset mqtt_acl:admin MQTT 1
- 1
二、配置redis认证
在 etc/plugins 目录下修改 emq_auth_redis.conf 配置文件
-
cd /usr/local/emqtt/emqttd/etc/plugins
-
vim emq_auth_redis.conf
-
添加 redis 连接配置,保存并退出
## Redis server address. ## ## Value: Port | IP:Port ## ## Examples: 6379, 127.0.0.1:6379, localhost:6379 auth.redis.server = 127.0.0.1:6379
Redis pool size.
Value: Number
auth.redis.pool = 8
Redis database no.
Value: Number
auth.redis.database = 0
Redis password.
Value: String
auth.redis.password = 123456
-
开启 redis 认证插件
-
第一种方式:emqttd_ctl plugins load emq_auth_redis
-
第二种方式:在 web 管理控制台中开启该插件
-
-
重启服务,使插件生效
三、测试
emqtt 的 redis 插件默认明文不加密,其他加密方式如下图
-
此时我在 redis 中配置了
-
username:admin
-
password:123456
-
topic:MQTT
-
access:1 (行为类型: 1=订阅2=发布3=订阅+发布)
-
-
在项目中配置了
-
username:admin
-
password:123456
-
clientid: mqtt-client
-
topic: MQTT
-
-
此时我们再启动项目时,只有正确地配置了用户名、密码、topic 和 access 之后,才可以连接成功,否则会报异常
四、启动超级用户
emqtt 的 redis 插件可以配置超级用户,超级用户可以跳过所有的访问控制,直接连接到 emqtt 服务
根据官方文档
-
创建超级用户的命令为:hset mqtt_user: is_superuser <is_superuser>
hset mqtt_user:admin is_superuser 1
- 1
-
此时我在 redis 中配置了
-
username:admin
-
password:123456
-
topic:MQTT
-
access:1 (行为类型: 1=订阅2=发布3=订阅+发布)
-
is_superuser:1 (是否为超级用户: 0=否1=是)
-
-
在项目中配置了
-
username:admin
-
password:123456
-
clientid: mqtt-client
-
topic: MQTT
-
-
此时我们再启动项目时,只要正确地配置了用户名和密码之后,就可以连接成功
例如:访问控制设置只能订阅 (access = 1),而本地服务器调用了发布 (access = 2) 的方法,因此理论上是发布不了的,而 admin 用户已经被设为了超级用户,所以就可以发布消息
java后台设置redis方式:
如果是这种方式设置,redis中存储的结构是这样:
filed中的value多了双引号,当设备连接时会匹配错误导致认证失败。
正确的方式应该这样:
现在redis中存的结构如下:
再连接:
提示成功:
-
这篇关于emq-redis认证小坑总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!