一、认证
-
进入后台界面后,选择访问控制->客户端认证
-
在右上角选择创建
-
认证方式选择JWT
-
JWT无需选择数据源
-
配置参数
- JWT来自于
password
- 加密方式
hmac-based
- Secret填写预设的JWT私钥,关闭Base64编码
- JWT来自于
-
配置负载验证
Claim Expected Value clientId ${clientid} username ${username} 负载验证可以验证JWT负载中的值(
Claim
)是否与建立mqtt协议的clientId
和username
一致,防止身份盗用。
二、授权
- 进入后台界面后,选择访问控制->客户端授权
- 在右上角选择创建
- 数据源选择MySQL
- 配置参数
- 服务中填写MySQL服务器的IP:Port,注意:如果EMQX服务器和MySQL服务器都位于docker容器内,不能直接使用localhost访问。使用
docker inspect [containerName]
查看容器间虚拟IP。 - 数据库中填写数据库名称即可
- 用户名和密码即为数据库的用户名和密码
- TLS视情况自行决定
- Pool Size连接池默认为8
- SQL语句为从数据表中获取信息的语句,可以自定义
- 服务中填写MySQL服务器的IP:Port,注意:如果EMQX服务器和MySQL服务器都位于docker容器内,不能直接使用localhost访问。使用
- 构造数据表(来自EMQX5.0文档的官方构造)
CREATE TABLE `mqtt_acl` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `permission` varchar(5) NOT NULL, `action` varchar(9) NOT NULL, `topic` varchar(100) NOT NULL, INDEX username_idx(username), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- 返回客户端授权界面,右上角设置中将未匹配时执行设置为deny(即白名单制)