Skip to content

MQTT认证 ​

[TOC]

MQTT认证-密码认证 ​

1. 支持的认证方式 ​

WEBHOOk认证

REDIS认证

MYSQL认证

内置数据库认证

JWT认证

支持的认证方式页面截图支持的认证方式页面截图

2. 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 秒,同时限定最大连接数为 1000
    • x-request-source: fsmq 定义了请求来源的标识为 fsmq,可能用于服务器端区分不同来源的请求并进行相应的逻辑处理。
  • 请求体(body):请求体中包含了多个使用占位符的字段,像 clientid、password、username、ipaddress、keepalive、proto_ver、connected_at 等,这些占位符意味着在实际运行时,会根据具体的业务场景和对应的值进行替换,将真实的数据传递给服务器。

    参数示例:

    json
    {
      "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认证统计页面截图

WEBHOOK认证演示 ​

请求方式、请求连接、请求头

WEBHOOK认证演示页面截图

添加 请求体 、连接池大小、连接超时 时间、HTTP管道、请求超时

请求体可选传递认证参数:

clientid     客户端id
keepalive    心跳时间
proto_ver    协议版本
connected_at 认证时间
username     用户名
password     密码 
ipaddress    客户端IP

"clientid": "${clientid}" 字段名称 :映射值

WEBHOOK认证演示页面截图

上述图中演示,使用的URL是 http://127.0.0.1:18083/webhook 来实现认证的业务逻辑。在实际业务开发中,按照您的业务端更改API接口

认证接口示例:

java
@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;
}

返回接收的数据示例:

json
[{"username":"FastBee","password":"123","clientid":"test-webhook","ipaddress":"127.0.0.1:51317","keepalive":60,"proto_ver":4}]

3. 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单机部署认证演示 ​

redis认证参数配置如下:

REDIS单机部署认证演示页面截图

其中命令行为:

mqtt_user:${username} 是哈希表的key值,其中**${username}**是占位符,会自动匹配mqtt的username

password 和 salt 是从哈希表中获取值的字段名 password是固定的密码,salt是md5加盐值

加盐方式:prefix 在前缀加盐

密码加密方式:md5 加密方式使用md5

sh
HMGET mqtt_user:${username} password salt

redis记录值如下图所示:

REDIS单机部署认证演示页面截图

下图为mqttx模拟连接mqtt服务

username : FastBee ; password: 123

​ REDIS单机部署认证演示页面截图

因此密码的计算即是:123123(salt+password)的 md5计算 值:4297f44b13955235245b2497399d7a93

4. 内置数据库认证 ​

配置参数 ​

加盐方式:

  • disable 不加盐
  • prefix 前缀
  • suffix 后缀

加密方式:

  • plain
  • md5
  • sha
  • sha256
  • sha512
  • bcrypt

盐:加密盐

账号&密码: MQTT账号 和 MQTT密码

内置数据库认证统计 ​

内置数据库认证统计页面截图

内置数据库认证演示 ​

如下图所示:

密码加密方式: md5 ; 加盐方式: prefix ,前置 ; 盐:加盐值 ;

内置数据库认证演示页面截图

MQTTX模拟连接和REDIS演示一致,结果一致,这里就不展示最后结果。

5. MYSQL认证 ​

MYSQL配置参数 ​

服务器地址: mysql服务器地址+端口

数据库: 数据库表名

用户名: mysql用户名

密码: mysql密码

SQL: 查询密码和盐的sql

连接池: mysql连接池大小,默认值10

查询超时: mysql查询超时时间,默认值25s

密码加密方式: 密码加密

加盐方式: 密码生成加盐

MYSQL认证统计 ​

MYSQL认证统计页面截图

MYSQL认证演示 ​

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

MYSQL认证演示页面截图MYSQL认证演示页面截图

新建表如下图所示:

sql
CREATE TABLE `auth` (
  `username` varchar(255) NOT NULL,
  `password` varchar(255) DEFAULT NULL,
  `salt` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

新增一条数据演示:

sql
INSERT INTO `fastbee`.`auth` (`username`, `password`, `salt`) VALUES ('FastBee', '4297f44b13955235245b2497399d7a93', '123');

SQL查询为下面所示:获取 password 和 salt

sql
SELECT password, salt FROM auth where username = ${username} LIMIT 1

MQTTX模拟连接如REDIS演示一直,结果也一直,这里不再演示。

6. JWT认证 ​

...开发中

蜂信物联 | fastbee.cn