Docker搭建EMQ认证-EMQX_AUTH_REDIS


不关注介绍的小伙伴,直接Ctrl+F搜索‘GO’开始正文

EMQ认证简介

身份认证是大多数应用的重要组成部分,MQTT 协议支持用户名密码认证,启用身份认证能有效阻止非法客户端的连接。

EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。

EMQ X 的认证支持包括两个层面:

MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证。

在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书。也支持基于 PSK 的 TLS/DTLS 认证。

本章节介绍了 EMQ X 支持的认证方式以及对应插件的配置方法。

EMQ认证方式

EMQ X 支持使用内置数据源(文件、内置数据库)、JWT、外部主流数据库和自定义 HTTP API 作为身份认证数据源。

连接数据源、进行认证逻辑通过插件实现的,每个插件对应一种认证方式,使用前需要启用相应的插件。

客户端连接时插件通过检查其 username/clientid 和 password 是否与指定数据源的信息一致来实现对客户端的身份认证。

EMQ X 支持的认证方式:

内置数据源

Username 认证
Cliend ID 认证
Mnesia 认证
使用配置文件与 EMQ X 内置数据库提供认证数据源,通过 HTTP API 进行管理,足够简单轻量。

外部数据库

LDAP 认证
MySQL 认证
PostgreSQL 认证
Redis 认证
MongoDB 认证
外部数据库可以存储大量数据,同时方便与外部设备管理系统集成。

其他

HTTP 认证
JWT 认证
JWT 认证可以批量签发认证信息,HTTP 认证能够实现复杂的认证鉴权逻辑。

EMQ认证结果

任何一种认证方式最终都会返回一个结果:

认证成功:经过比对客户端认证成功
认证失败:经过比对客户端认证失败,数据源中密码与当前密码不一致
忽略认证(ignore):当前认证方式中未查找到认证数据,无法显式判断结果是成功还是失败,交由认证链下一认证方式或匿名认证来判断

以上内容均来自EMQ官网(中国),有兴趣的小伙伴自行前往查看,链接已加

(GO)搭建EMQ认证

环境准备

环境准备&软件

环境:
Docker环境;
Redis环境;
EMQX Broker环境。

软件

RedisDesktopManager:Redis可视化客户端;
mqtt.fx:mqtt客户端连接工具。

EMQ配置准备(Docker启动无需准备)

修改etc/plugins/emqx_auth_redis.conf下内如如下:

服务器地址
auth.redis.server = 127.0.0.1:6379
连接池大小
auth.redis.pool = 8
auth.redis.database = 0
auth.redis.password =

数据准备(Redis)

为Redis数据库创建用户表
hset mqtt_user:admin password 123456
为Redis数据库创建控制表
hset mqtt_acl:admin MQTT 1

启动EMQX Broker服务(Docker启动)

启动EMQX_AUTH_REDIS插件并配置Redis连接信息、数据加密信息:

docker run -d --name emqx -p 1883:1883 -p 8083:8083 \
	-p 8883:8883 -p 8084:8084 -p 18083:18083 \
	-e EMQX_LOADED_PLUGINS="emqx_management,emqx_auth_redis,emqx_recon,emqx_retainer,emqx_dashboard" \
	-e EMQX_AUTH__REDIS__SERVER="172.17.0.3:6379" \
	-e EMQX_AUTH__REDIS__PASSWORD_HASH=plain \
	-e EMQX_ALLOW_ANONYMOUS=false \
	emqx/emqx:v4.0.0
参数介绍:
	EMQX_LOADED_PLUGINS:启动插件配置,多个插件使用’,’隔开(emqx_auth_redis为Redis认证)
	EMQX_AUTH__REDIS__SERVER:Redis连接地址(ps:如果是Docker运行Redis,需查询Redis所运行的Docker容器的IP,Docker查看容器IP命令:
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器ID)
	EMQX_AUTH__REDIS__PASSWORD_HASH:加密方式(分别有:md4, md5, ripemd160, sha, sha224, sha256, sha384, sha512)
	EMQX_ALLOW_ANONYMOUS:关闭匿名认证

启动成功

访问服务器Dashboard查看emqx_auth_redis是否开启成功
验证成功

验证EMQ认证是否生效

用户admin,密码123456;使用mqtt.fx连接EMQX Broker服务
再使用其他用户连接,admin,123456会连接成功,其他账号不会连接成功
验证是否生效
END 到此结束,谢谢各位

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值