emq-redis认证小坑总结

2023-10-23 23:32
文章标签 总结 认证 redis 小坑 emq

本文主要是介绍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认证小坑总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271188

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

Java注解详细总结

什么是注解?         Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。         注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。 自定义注解  现在我们自定义一个MyTest注解 public @interface MyTest{String aaa();boolean bbb()

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

为什么要做Redis分区和分片

Redis分区(Partitioning)和分片(Sharding)是将数据分布在多个Redis实例或多个节点上的做法。这种技术用于提高性能、可扩展性和可用性。以下是执行Redis分区和分片的主要原因: 1. **提高吞吐量**:    - 通过将数据分散到多个节点,可以并行处理更多的操作,从而提高整体吞吐量。 2. **内存限制**:    - 单个Redis实例的内存是有限的。分区允许数据

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

七种排序方式总结

/*2018.01.23*A:YUAN*T:其中排序算法:冒泡排序,简单排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序*/#include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10000#define FALSE 0#define TRUE 1typedef struct {i

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相关依赖 <?xml version