MQTT认证
[TOC]
一、MQTT认证-密码认证
支持的认证方式
WEBHOOk认证
REDIS认证
MYSQL认证
内置数据库认证
JWT认证


WEBHOOK认证
HTTP 参数配置
请求地址:请求的 URL 设定为
http://127.0.0.1:8080/webhook,表明是向本地服务器(IP 地址为127.0.0.1,端口号8080)下的/webhook路径发起请求。请求方法:指定使用
POST或get 方法来发送请求连接超时与请求超时
connect_timeout设置为15,意味着在尝试建立连接时,如果超过 15 秒还未成功连接,将会触发超时处理。request_timeout同样为15,表示从发出请求开始计时,若 15 秒内没有收到完整响应,会认定请求超时。
连接管道相关:
enable_pipelining,HTTP 连接管道功能,允许在同一个连接上连续发送多个请求连接池大小:
pool_size为8,即创建了一个大小为 8 的连接池,用于管理和复用 HTTP 连接,提高性能和资源利用效率。请求头(
headers)accept: application/json表明客户端期望服务器返回的数据格式为 JSON 格式,便于后续解析和处理响应数据。cache-control: no-cache告知服务器不要使用缓存,每次都返回最新的数据,确保数据的实时性。connection: keep-alive要求服务器保持连接,以便后续可以复用该连接进行更多请求,减少频繁建立和断开连接的开销。keep-alive: timeout=30, max=1000进一步细化了保持连接的参数,设置连接的超时时间为 30 秒,同时限定最大连接数为 1000x-request-source: fsmq定义了请求来源的标识为fsmq,可能用于服务器端区分不同来源的请求并进行相应的逻辑处理。
请求体(
body):请求体中包含了多个使用占位符的字段,像clientid、password、username、ipaddress、keepalive、proto_ver、connected_at等,这些占位符意味着在实际运行时,会根据具体的业务场景和对应的值进行替换,将真实的数据传递给服务器。参数示例:
{ "clientid": "${clientid}", "password": "${password}", "username": "${username}", "ipaddress": "${ipaddress}", "keepalive": "${keepalive}", "proto_ver": "${proto_ver}" }
完整参数示例:
```json
"http_params": {
"url": "http://127.0.0.1:8080/webhook",
"method": "POST",
"connect_timeout": 15,
"enable_pipelining": 100,
"pool_size": 8,
"request_timeout": 15,
"headers": {
"accept": "application/json",
"cache-control": "no-cache",
"connection": "keep-alive",
"keep-alive": "timeout=30, max=1000",
"x-request-source": "fsmq"
},
"body": {
"clientid": "${clientid}",
"password": "${password}",
"username": "${username}",
"ipaddress":"${ipaddress}",
"keepalive":"${keepalive}",
"proto_ver":"${proto_ver}",
"connected_at":"${connected_at}"
}
},
```
WEBHOOK认证统计

WEBHOOK认证演示
请求方式、请求连接、请求头

添加 请求体 、连接池大小、连接超时 时间、HTTP管道、请求超时
请求体可选传递认证参数:
clientid 客户端id
keepalive 心跳时间
proto_ver 协议版本
connected_at 认证时间
username 用户名
password 密码
ipaddress 客户端IP"clientid": "${clientid}" 字段名称 :映射值

上述图中演示,使用的URL是 http://127.0.0.1:18083/webhook 来实现认证的业务逻辑。在实际业务开发中,按照您的业务端更改API接口
认证接口示例:
@PostMapping("/webhook")
private void webhookAuth(@RequestBody WebHookTestVo vo) {
// 您的认证处理逻辑
}
//接收数据实体类
@Data
public class WebHookTestVo {
private String username;
private String password;
private String clientid;
/** 客户端源 IP 地址 **/
private String ipaddress;
/** 客户端申请的心跳保活时间 **/
private Integer keepalive;
/** 协议版本号 **/
private Integer proto_ver;
/** 时间戳(秒) **/
private Long connected_at;
/** 错误原因 **/
private String reason;
}返回接收的数据示例:
[{"username":"FastBee","password":"123","clientid":"test-webhook","ipaddress":"127.0.0.1:51317","keepalive":60,"proto_ver":4}]REDIS认证
REDIS配置参数
部署模式:
- 单节点
- 集群模式(Cluster)
- Sentinel
服务地址:
- 单节点: 127.0.0.1:6379 (示例值)
- 集群模式:127.0.0.1:6379,127.0.0.2:6379,127.0.0.3:6379 (示例值)
- sentinel:127.0.0.1:6379,127.0.0.2:6379,127.0.0.3:6379 (示例值)
连接池大小:默认值: 8
加盐方式:
- disable 不加盐
- prefix 前缀
- suffix 后缀
加密方式:
- plain
- md5
- sha
- sha256
- sha512
- bcrypt
REDIS认证统计:

REDIS单机部署认证演示
redis认证参数配置如下:

其中命令行为:
mqtt_user:${username}是哈希表的key值,其中**${username}**是占位符,会自动匹配mqtt的username
password 和 salt 是从哈希表中获取值的字段名 password是固定的密码,salt是md5加盐值
加盐方式:prefix 在前缀加盐
密码加密方式:md5 加密方式使用md5
HMGET mqtt_user:${username} password saltredis记录值如下图所示:

下图为mqttx模拟连接mqtt服务
username : FastBee ; password: 123

因此密码的计算即是:123123(salt+password)的 md5计算 值:4297f44b13955235245b2497399d7a93
内置数据库认证
配置参数
加盐方式:
- disable 不加盐
- prefix 前缀
- suffix 后缀
加密方式:
- plain
- md5
- sha
- sha256
- sha512
- bcrypt
盐:加密盐
账号&密码: MQTT账号 和 MQTT密码
内置数据库认证统计

内置数据库认证演示
如下图所示:
密码加密方式: md5 ; 加盐方式: prefix ,前置 ; 盐:加盐值 ;

MQTTX模拟连接和REDIS演示一致,结果一致,这里就不展示最后结果。
MYSQL认证
MYSQL配置参数
服务器地址:mysql服务器地址+端口
数据库:数据库表名
用户名:mysql用户名
密码:mysql密码
SQL:查询密码和盐的sql
连接池:mysql连接池大小,默认值10
查询超时:mysql查询超时时间,默认值25s
密码加密方式:密码加密
加盐方式:密码生成加盐
MYSQL认证统计

MYSQL认证演示
演示库为 fastbee,实际情况自行更改


新建表如下图所示:
CREATE TABLE `auth` (
`username` varchar(255) NOT NULL,
`password` varchar(255) DEFAULT NULL,
`salt` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;新增一条数据演示:
INSERT INTO `fastbee`.`auth` (`username`, `password`, `salt`) VALUES ('FastBee', '4297f44b13955235245b2497399d7a93', '123');SQL查询为下面所示:获取 password 和 salt
SELECT password, salt FROM auth where username = ${username} LIMIT 1MQTTX模拟连接如REDIS演示一直,结果也一直,这里不再演示。
JWT认证
...开发中
