Emqx 环境配置
约 1254 字大约 4 分钟
2026-06-18
Emqx 客户端认证
[1]数据库认证配置
设备上线激活之后,基于 Emqx 的数据库认证方式,就是目前设备的主要核心认证方式。Emqx 部署完成之后,需要配置基于数据库的认证方式。
Emqx 数据库认证方式需要访问指定数据库,通过配置的 SQL 查询实现客户端的认证。在 ThingsBrain 中,设备 Mqtt 账号存储在 iot_mqtt_account 表中。
在 Emqx 的【访问控制】->【客户端认证】功能中,点击【创建】,选择 Password-Based 认证方式

点击【下一步】,在【数据源】页面选择具体数据源。
提示
目前,ThingsBrain 默认使用的是 Postgresql 数据库作为数据源。你可以结合自己的实际需求进行调整,如果您的部署架构比较复杂,可能会需要额外的调整和开发支持

最后,配置数据库具体的链接信息以及 SQL 语句。

因为 ThingsBrain 密码均是采用 Spring Security 提供 bcrypt 方式进行密码加密,所以在配置数据库信息时,密码加密方式要选择 bcrypt。但是因为 Spring Security bcrypt 加密的密码会在密码前面增加额外标识,这与 Emqx bcrypt 密码格式不匹配,因此在 Emqx 中使用 ThingsBrain 密码时,需要将密码前端的标识去掉。具体的查询 SQL 如下:
SELECT SUBSTRING(password, 9) as password_hash, is_superuser FROM iot_mqtt_account where client_id = ${clientid} and username = ${username} LIMIT 1重要
Mqtt 是 ThingsBrain 的核心组件,前面所述内容是假定您所使用的 Mqtt 与系统数据库是部署在可以互通的环境下。如果您实际的环境不同,请在确保安全的前提下自行调整。当然,也可以自行选择或者开发其它的认证方式。
[2]HTTP 认证配置
因为 Emqx 默认不支持签名方式的认证,同时简化签名认证的实现方式,ThingsBrain 目前基于 Emqx HTTP 认证方式实现了自己的签名认证方式。
自定义实现 Emqx 插件应该更合理,采用 HTTP 的方式仅是为了简单便捷,后续会根据实际需要考虑插件方式。
Emqx HTTP 认证配置,与数据库认证配置方法类似,唯一不同的就是配置信息不同,具体的配置信息如下:

注意
上图中配置的请求路径为【单体】架构中的路径,如果要使用微服务架构,需要在上面的基础上增加服务名
[3]认证顺序配置
在 Emqx 中添加了 数据库认证 和 HTTP 认证 两种认证方式之后,需要调整认证的顺序。确保 数据库认证 方式配置在 HTTP 认证 方式之前。
警告
如果顺序配置错误会导致设备正常链接失效,并增大系统请求负担。

[4]授权配置(ACL)
客户端认证配置,是为了有效阻止非法客户端(设备)的连接 Mqtt。客户端授权配置,是指对 MQTT 客户端的发布和订阅操作进行权限控制,以便更好的保障数据的安全性。
与 Emqx 认证配置类似,在 Emqx 的【访问控制】->【客户端授权】功能中,点击【创建】,选择具体数据源
提示
目前,ThingsBrain 默认使用的是 Postgresql 数据库作为数据源。你可以结合自己的实际需求进行调整,如果您的部署架构比较复杂,可能会需要额外的调整和开发支持

Emqx 数据认证配置类,配置数据库具体的链接信息以及 SQL 语句

具体的查询 SQL 如下:
SELECT
auth.permission,
auth.action,
auth.topic
FROM
iot_mqtt_account acc
INNER JOIN iot_mqtt_account_category acc_cat ON acc.account_id = acc_cat.account_id
INNER JOIN iot_mqtt_category cat ON acc_cat.category_id = cat.category_id
INNER JOIN iot_mqtt_category_authority cat_auth ON cat.category_id = cat_auth.category_id
INNER JOIN iot_mqtt_authority auth ON cat_auth.authority_id = auth.authority_id
WHERE
acc.client_id = ${clientid}
AND acc.username = ${username}重要
Emqx 的 ACL 支持以下字段信息:
permission: 用于指定操作权限,可选值有 allow 和 deny。action: 用于指定当前规则适用于哪些操作,可选值有 publish、subscribe 和 all。topic: 用于指定当前规则适用的主题,可以使用主题过滤器和主题占位符。qos: (可选)用于指定当前规则适用的消息 QoS,可选值有 0、1、2,默认为所有 QoS。retain: (可选)用于指定当前规则是否支持发布保留消息,可选值有 0、1,默认允许保留消息。
其中 qos 和 retain 为可选,当前 ThingsBrain 默认的 Emqx ACL 也仅配置 permission、action 和 topic。
配置 qos 和 retain 会让权限控制更加精细,也会极大增加复杂度,系统 Mqtt 和 Emqx 核心代码和配置均需要同步调整。如果配置错误,可能会导致接收和发布消息失败。
版权所有
版权归属:码匠君
