了解了 Mysql 插件认证及访问控制后,现在我们再来了解下 Redis 插件认证以及访问控制,默认关闭了匿名认证及鉴权行为
一、创建用户表和控制表
根据官方文档
-
创建用户表的命令为:hset mqtt_user: password
hset mqtt_user: password
127.0.0.1:6379> hset mqtt_user:admin password 123456
-
创建控制表的命令为:hset mqtt_acl:
hset mqtt_acl:
hset mqtt_acl:admin MQTT 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
-
此时我在 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 用户已经被设为了超级用户,所以就可以发布消息