MQTT / Mosquitto 桥未获得代理 ACL 授权

问题描述 投票:0回答:1

我有一个连接 Mosquitto 经纪人的桥梁,工作正常。但它显示错误:

Connection Refused: not authorised
当我尝试在桥接代理上使用这个简单的 ACL 文件时:

user topic1_user
topic topic1/#

在我的网桥配置中,我在

Bridges
部分下有这些设置:

connection bridge-conn1
address remotebroker:8887
topic topic1/# both
remote_username topic1_user
remote_password secret

我错过了什么吗?

mqtt acl mosquitto
1个回答
0
投票

所以我在这个问题上挣扎了一段时间。

我的用例:

我有一个 VerneMQ 代理作为云代理,然后对于每个边缘客户端,每个边缘设备上运行 x 数量的基于 MQTT 的应用程序。

这些应用程序连接到边缘设备上的本地 Mosquitto Bridge Broker,因此通信通过 Bridge 进行身份验证,每个应用程序仅连接到 Bridge,并且所有流量如果转发到 Cloud Broker,边缘设备 ID 为前缀。

现在我也收到了这个可怕的

Connection Refused: not authorised
消息,并且无法理解为什么,因为如果我在 MQTTX 的 MQTTExplorer 上测试用户凭据,它会按预期工作。

但是当浏览我的 VerneMQ 代理的日志时,我可以看到桥试图访问 $SYS 主题以告诉云代理它们的连接。

解决方案是让每个客户端都可以使用其 ClientID 写入此主题:

云代理的 ACL 文件:

user admin
topic #

pattern device/%u/#
pattern $SYS/broker/connection/%c/#

pattern device/%u/#
让每个桥获取本地流量并在
device/some_id/#

下发布

pattern $SYS/broker/connection/%c/#
让每个网桥通知并完成其连接并设置任何主题转发

现在,如果 $SYS 主题对于所有代理来说结构都相同,我不知道,但是在我使用 VerneMQ 和 Mosquitto 的情况下,这对我有用。

Mosquitto 日志 在为 Bridge 启用 $SYS 主题之前:

1700743699: Bridge e36b28a2-d5bf-4a25-a048-7aea60b7b596 sending CONNECT
1700743699: Received CONNACK on connection local.e36b28a2-d5bf-4a25-a048-7aea60b7b596.
1700743699: Connection Refused: Not authorized
1700743699: Client local.e36b28a2-d5bf-4a25-a048-7aea60b7b596 closed its connection.

Mosquitto 日志为 Bridge 启用 $SYS 主题后:

1700743841: Bridge e36b28a2-d5bf-4a25-a048-7aea60b7b596 sending CONNECT
1700743841: Received CONNACK on connection local.e36b28a2-d5bf-4a25-a048-7aea60b7b596.
1700743841: Bridge local.e36b28a2-d5bf-4a25-a048-7aea60b7b596 sending SUBSCRIBE (Mid: 2, Topic: device/e36b28a2-d5bf-4a25-a048-7aea60b7b596/#, QoS: 0, Options: 0x0c)
1700743841: Received SUBACK from local.e36b28a2-d5bf-4a25-a048-7aea60b7b596

来自物联网开发者同事,希望这对遇到困难的人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.