emq auth mysql_EMQ X 基于 MySQL 的 MQTT 连接认证

EMQ X MQTT 连接认证配置教程 - MySQL 版
本文介绍了如何配置 EMQ X 以使用 MySQL 进行 MQTT 连接认证,包括创建数据库和认证表,设置认证数据,修改插件配置以及启用认证功能。详细步骤涉及创建 `mqtt_user` 表,插入示例数据,配置 `emqx_auth_mysql.conf` 文件,并调整 EMQ X 配置以关闭匿名认证。

创建数据库

你可以使用任何自己喜欢的 客户端,创建好相应的数据库。这里用的是 MySQL 自带的命令行客户端,打开 MySQL 的控制台,如下所示,创建一个名为 emqx 的认证数据库,并切换到 emqx 数据库。mysql> create database emqx;

Query OK, 1 row affected (0.00 sec)

mysql> use emqx;

Database changed

创建表

建议的表结构如下,其中,username 为客户端连接的时候指定的用户名,此处的值如果设置为 $all 表示该规则适用于所有的用户

password 为使用 salt 加密后的密文

salt 为加密串

is_superuser 是否为超级用户,用于控制 ACL,缺省为0;设置成 1 的时候为超级用户,可以跳过 ACL 检查数据表字段可以不用完全跟下面的一致,可以根据业务需要设置,通过 `emqx_auth_mysql.conf` 配置文件中的 `auth_query` 配置项来指定。

1de6a899760fc074005bdc11b7d1f838.png

认证表:CREATE TABLE `mqtt_user` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(100) DEFAULT NULL,

`password` varchar(100) DEFAULT NULL,

`salt` varchar(35) DEFAULT NULL,

`is_superuser` tinyint(1) DEFAULT 0,

`created` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `mqtt_username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

进行身份认证时,EMQ X 将使用当前客户端信息填充并执行用户配置的认证 SQL,查询出该客户端在数据库中的认证数据。select password from mqtt_user where username = '%u' limit 1

字段说明%u:用户名

%c:clientid

%P:明文密码

%C:TLS 证书公用名(证书的域名或子域名),仅当 TLS 连接时有效

%d:TLS 证书 subject,仅当 TLS 连接时有效

可以根据业务需要调整认证

### 开启 MQTT 账号认证 EMQ X 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证[^3]。以下介绍几种常见方式: - **用户名密码认证**:使用 `emqx_auth_username` 插件。可以通过以下命令添加、删除账号及查询账号列表: ```bash # 添加一个账号 test,密码 123456 ./emqttd_ctl users add test 123456 ok # 删除一个账号密码 ./emqttd_ctl users del 账号名 ok # 查询存在的账号列表 ./emqttd_ctl users list ``` - **HTTP 认证**:通过配置 EMQ X 使用 HTTP API 实现账号认证。配置示例如下: ```plaintext auth.http { enable = true auth_req { url = "http://your-auth-server.com/auth" method = post body = '{"clientid": "${clientid}", "username": "${username}", "password": "${password}"}' headers.content-type = "application/json" } } ``` - **JWT 认证**:Jwt 的全称是 JSON Web Token,是目前比较流行的接口认证解决方案。客户端发送用户名密码信息到认证服务器获取 token;客户端请求 API 获取数据时带上 token;服务器端验证 token,合法则返回正确的数据[^5]。 ### 解决 EMQ X 中认证插件停止运行的问题 #### 检查配置文件 认证插件停止运行可能是配置文件存在错误。需检查 `emqx_auth_http`、`emqx_auth_jwt` 等插件的配置文件,确保各项参数配置正确,例如 `emqx_auth_http` 中的 `url`、`method` 等。 #### 查看日志文件 查看 EMQ X 的日志文件,日志文件中会记录插件启动过程中的错误信息,根据错误信息进行排查。日志文件通常位于 EMQ X 安装目录下的 `logs` 文件夹中。 #### 检查依赖服务 如果插件依赖其他服务,如 `emqx_auth_http` 依赖 HTTP 服务,`emqx_auth_jwt` 依赖 JWT 认证服务器,需确保这些服务正常运行。 #### 重启 EMQ X 及插件 可以尝试重启 EMQ X 以及相关认证插件: ```bash # 停止 EMQ X ./emqx stop # 启动 EMQ X ./emqx start # 启动 emqx_auth_http 插件 ./emqx_ctl plugins load emqx_auth_http # 启动 emqx_auth_jwt 插件 ./emqx_ctl plugins load emqx_auth_jwt ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值