用户:XYZ 没有地址权限='SEND'

User: XYZ does not have permission='SEND' on address

我能够通过 Web 控制台以及使用来自我的 LDAP 服务器的凭据的 bin/artemis producer 命令进行身份验证。当我将相同的凭据与 mosquitto_pub 用于同一主题时,日志显示

User: $username does not have permission='SEND' on address $address" 

我也在日志中验证了已解析的角色 - mosquitto_pubartemis producer 的角色相同。在我的例子中,他们解析了一个具有 admin 权限的 producer 角色。

根据协议的不同,授权有什么不同吗?授权似乎适用于 CORE 协议和 AMQP(我已经通过 artemis producer 测试过)。

不幸的是,我无法用 artemis producer --protocol MQTT 进行交叉检查 - "protocol MQTT not supported" 失败了。

the documentation 中所述,遗留 admin 权限未映射到 send 权限:

ActiveMQ 5.x only has 3 permission types - read, write, and admin. These permission types are described on their website. However, as described previously, ActiveMQ Artemis has 9 permission types - createAddress, deleteAddress, createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue, send, consume, browse, and manage. Here's how the old types are mapped to the new types:

  • read - consume, browse
  • write - send
  • admin - createAddress, deleteAddress, createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue, manage (if mapAdminToManage is true)

因此,您的 producer 角色需要 write 权限。

不清楚为什么 producer 命令适用于其他协议(即核心和 AMQP),但根据您提供的内容,我相信这就是它不适用于 MQTT 的原因。