EMQX服务处理
1. 服务搭建
下载压缩包
解压
$ unzip emqx-4.4.3-otp24.1.5-3-el7-amd64.zip
配置环境变量(可选)
# 编辑/etc/profile文件
$ vim /etc/profile
# 添加内容
$ export EMQX_HOME=/usr/local/share/tmp/emqx
$ export PATH=$EMQX_HOME/bin:$PATH
# 文件生效
$ source /etc/profile
基本命令(配置环境变量,若没有配置环境变量,需要进入EMQX的bin目录下操作)
# 启动
$ emqx start
# 重启
$ emqx restart
# 停止
$ emqx stop
# 查看状态
$ emqx_ctl status
2. EMQX认证处理
EMQ-X 的认证访问控制
- 连接认证: EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接(主要实现);
- 访问控制: EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作(ACL权限认证模块);
认证机制
认证流程
EMQX提供多种认证方式,多种认证方式组成了认证链,当同时启用多个认证方式时,EMQX 将按照插件开启先后顺序进行链式认证:
- 一旦认证成功,终止认证链并允许客户端接入
- 一旦认证失败,终止认证链并禁止客户端接入
- 直到最后一个认证方式仍未通过,根据匿名认证配置判定:
- 匿名认证开启时,允许客户端接入
- 匿名认证关闭时,禁止客户端接入
3. HTTP安全认证
HTTP安全认证文档地址
认证原理
EMQX Broker 使用当前客户端相关信息作为设备连接事件中的参数,向自定义鉴权服务发起请求查询权限,通过返回的 HTTP 状态码处理鉴权请求。
- 身份验证失败:API 返回状态码 4xx
- 认证成功:API 返回状态码 200
- 身份验证被忽略:API 返回状态码 200,消息正文为ignore;即:当前认证方式中未查找到认证数据,无法显式判断结果是成功还是失败,交由认证链下一认证方式或匿名认证来判断。
书写配置文件
# etc/plugins/emqx_auth_http.conf
## HTTP认证请求地址
auth.http.auth_req = http://127.0.0.1:80/mqtt/auth
## HTTP 请求方法
## Value: post | get | put
auth.http.auth_req.method = post
## 认证请求的 HTTP 请求头部,默认情况下配置 Content-Type 头部。
## Content-Type 头部目前支持以下值:application/x-www-form-urlencoded,application/json
auth.http.auth_req.headers.content-type = application/x-www-form-urlencoded
## 请求参数
auth.http.auth_req.params = clientid=%c,username=%u,password=%P
注意HTTP安全认证中,包含ACL授权认证,若不需要直接注释即可
重启服务
$ emqx restart
引入插件
$ emqx_ctl plugins load [插件名称]
# exp:
$ emqx_ctl plugins load emqx_auth_http
连接测试
- 提供认证接口
- 使用MQTT FX工具或MQTTX工具进行连接测试
EMQX相关占位符
-
%u:用户名
-
%c:Client ID
-
%a:客户端 IP 地址
-
%r:客户端接入协议
-
%P:明文密码
-
%p:客户端端口
-
%C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效
EMQX相关占位符 -
%u:用户名
-
%c:Client ID
-
%a:客户端 IP 地址
-
%r:客户端接入协议
-
%P:明文密码
-
%p:客户端端口
-
%C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效
-
%d:TLS 证书 subject,仅当 TLS 连接时有效