docker 5.10的emqx使用http acl好像不行

EMQX 认证完成: username=9PSfpC7Yp53fih5H, result={“result”:“allow”,“is_superuser”:false,“acl”:[{“topic”:“$thing/9PSfpC7Yp53fih5H”,“permission”:“allow”,“action”:“subscribe”},{“topic”:“#”,“permission”:“deny”,“action”:“publish”}]}

限制了publish为deny,但是还是一直能发送

FIle配置如下,并且未使用

{allow, {username, {re, “^dashboard$”}}, subscribe, [“$SYS/#”]}.

{allow, {ipaddr, “127.0.0.1”}, all, [“$SYS/#”, “#”]}.

{deny, all, subscribe, [“$SYS/#”, {eq, “#”}, {eq, “+/#”}]}.

配置了客户端授权后,返回deny,然后mqtt.x点击断开链接的时候,就菊花转圈圈


acl的返回,然后就转菊花

来点emqx debug日志看看:eyes:


123.log.zip (25.7 KB)

上传了


用图片标记的username,设置了publish为deny,但是还能跨主题发送。

http试了不行,我用回mysql如上图,结果还是acl一样能跨主题发送


重新截图文字版本的图


日志里面显示是拒绝 publish 的。

MQTT Publish 返回 PUBREC 135:未经授权的发布

当您在使用MQTT协议进行消息发布(Publish)时,如果收到返回的PUBREC数据包,并且其中包含原因码(Reason Code)135,这明确表示**客户端未经授权(Not authorized)**向指定主题(Topic)发布消息。


MYSQL是因为你的 sql 语句没有查到。no_match 的默认行为为 allow,可以这改。


5.10.0的版本,我是否可以理解为用http服务的,在认证的时候返回下面的acl就可以了,不用在客户端授权重复配置了?

{
 "acl": [
  {
   "action": "subscribe",
   "permission": "allow",
   "topic": "$thing/9PSfpC7Yp53fih5H"
  },
  {
   "action": "publish",
   "permission": "deny",
   "topic": "#"
  }
 ],
 "is_superuser": false,
 "result": "allow"
}

我不知道我这个返回结果是否有问题,但是目前来说还是可以跨权限发布主题的

日志上是没成功啊,不是回了135么。。。

是回复了。。。

最后一个问题:5.10.0的版本,我是否可以理解为用http服务的,在认证的时候返回下面的acl就可以了,不用在客户端授权重复配置了?

是的,在里面加了 acl 就是这个作用。这样所有的 action 是最高效的。