通过 HTTP 查询进行授权
HTTP 授权方式将访问控制决策委托给外部 HTTP 服务。当客户端尝试发布或订阅时,EMQX Edge 会向配置的 URL 发送 HTTP 请求。如果服务器返回 HTTP 200,则允许该操作;否则拒绝该操作。
这种方式支持动态、细粒度的访问控制,并且无需重启 EMQX Edge。
工作原理
EMQX Edge 会针对每次发布或订阅尝试发送 HTTP 请求,请求使用你配置的方法、URL、请求头和参数。授权服务器评估请求后,返回 200 响应表示允许操作,返回其他状态码表示拒绝操作。
示例: 客户端 ID 为 sensor-01、用户名为 sensor-user 的客户端尝试向主题 home/temp 发布消息。使用以下参数配置:
| Key | Value |
|---|---|
clientid | %c |
username | %u |
topic | %t |
access | %A |
EMQX Edge 会填充占位符并发送以下请求:
POST http://127.0.0.1:8991/mqtt/acl
Content-Type: application/x-www-form-urlencoded
clientid=sensor-01&username=sensor-user&topic=home%2Ftemp&access=2授权服务器检查规则后,返回 HTTP 200 表示允许发布,返回其他状态码则表示拒绝。
ACL Cache TTL
为减少发送到授权服务器的 HTTP 请求数,EMQX Edge 支持缓存授权结果。当 ACL Cache TTL 设置为非零值时,授权请求结果会在指定时间内缓存。在该时间窗口内,如果后续请求使用相同参数,会立即返回缓存结果,而不会再次向服务器发送 HTTP 请求。
例如,将 ACL Cache TTL 设置为 30s 后,某个客户端的订阅或发布请求一旦通过授权,相同操作可在 30 秒内直接放行,无需重新查询服务器。
要配置 ACL Cache TTL,请在 Authorization 页面 Extended 标签页中点击 Settings 按钮。
将该值设置为 0(默认值)会禁用缓存,此时每次授权判断都会触发新的 HTTP 请求。
通过 Dashboard 配置
- 在 EMQX Edge Dashboard 中,进入 Authorization > Extended。
- 使用 Enable 列中的开关启用 HTTP 或 HTTP Super User。
- 点击 Actions 列中的编辑图标,打开配置表单。
- 填写 Method、URL、Headers 和 Parameters 字段。
- 点击 Save。
HTTP 授权
配置该项用于对发布和订阅操作进行授权:

HTTP Super User
配置该项可通过 HTTP 授予超级用户权限。超级用户会绕过主题级 ACL 检查。

配置参考
Method
HTTP 请求方法。可选值:POST 或 GET。默认值:POST。
URL
授权服务器端点的 URL。例如:http://127.0.0.1:8991/mqtt/acl。
Headers
每次授权请求中包含的 HTTP 请求头。
| Key | Description |
|---|---|
content-type | 请求体的媒体类型。可使用 application/x-www-form-urlencoded 或 application/json。 |
accept | 可选。你也可以添加 cookie 或 date 等请求头。 |
Parameters
用于构造请求体(POST)或查询字符串(GET)的参数。
HTTP 授权
| Key | Placeholder | Description |
|---|---|---|
clientid | %c | MQTT Client ID |
username | %u | 用户名 |
password | %P | 密码 |
access | %A | 待验证的权限:1 表示订阅,2 表示发布 |
topic | %t | 客户端尝试发布或订阅的主题。 |
ipaddr | %a | 客户端网络 IP 地址 |
mountpoint | %m | 挂载点 |
common | %C | 客户端 TLS 证书中的 Common Name。从 EMQX Edge 1.4.0 开始支持。 |
subject | %d | 客户端 TLS 证书中的 Subject。从 EMQX Edge 1.4.0 开始支持。 |
注意
以下键已在界面中定义,但当前版本尚不支持:sockport、protocol。
HTTP Super User
| Key | Placeholder | Description |
|---|---|---|
clientid | %c | MQTT Client ID |
username | %u | 用户名 |
password | %P | 密码 |
access | %A | 待验证的权限:1 表示订阅,2 表示发布 |
topic | %t | 客户端尝试发布或订阅的主题。 |