一、前言
EMQX支持通过用户名密码进行身份验证。当客户端尝试连接时,需按要求提供是否凭证信息,EMQX会在内置数据库中发起查询,并将返回得到的密码与客户端提供的信息进行匹配,匹配成功后,EMQX将接受客户端的连接请求。
二、客户端认证
1.创建客户端认证
2.我们选择密码认证的方式
3.选择MySQL数据库
4.设置MySQL连接配置参数
5.创建SQL表结构
CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password_hash` 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;
例如,我们希望添加一名用户名为 emqx_sp
、密码为 public
、盐值为 slat_foo123
、散列方式为 sha256
且超级用户标志为 true
的用户:
INSERT INTO mqtt_user ( username, password_hash, salt, is_superuser, created )
VALUES
(
'emqx_sp',
SHA2 ( concat( 'public', 'slat_foo123' ), 256 ),
'slat_foo123',
1,
NOW());
对应的查询语句和密码散列方法配置参数为:
- 密码加密方式:
sha256
- 加盐方式:
suffix
- SQL:
SELECT password_hash, salt, is_superuser FROM mqtt_user WHERE username = ${username} LIMIT 1
我们设置好之后在EMQX平台的客户端认证发送我们已经添加了MySQL密码方式的认证。
三、测试
现在我们去MQTTX客户端进行连接,发现如果没有填上用户名和密码我们就连接不了。
当我们填上之前设置的用户名和密码之后,发现连接成功 。