如何授权或限制用户不要在ejabberd MQTT模块中订阅和发布特定主题?

时间:2019-05-15 15:15:04

标签: mqtt ejabberd ejabberd-auth

我正在使用ejabberd 19.02进行客户端之间的MQTT通信。 我可以使用“外部”身份验证方法对用户进行身份验证-只需验证用户名和密码即可。

我还要求允许一个用户发布一个主题,而另一个用户不允许发布该主题。订阅也是如此。我相信它是授权或访问控制。 如何在ejabberd MQTT服务器中实现以上目标?

我看到了“访问规则”配置,但似乎与某些用户的主题订阅/发布限制不匹配。

是否可以像身份验证一样进行控制-如将责任授予外部

1 个答案:

答案 0 :(得分:1)

模块mod_mqtt提供了两种访问控制选项:access_subscribeaccess_publish。前者可用于限制订阅者的访问,而后者可用于限制发布者的访问。两者都接受映射filter: rule,其中filter是MQTT主题过滤器,而rule是标准的ejabberd访问规则。

作为示例,假设user1@domain.tld仅能发布到主题“ / foo / bar /”及其子主题,而user2@domain.tld仅能够订阅该主题及其子主题。配置如下所示:

acl:
  ...
  publisher:
    user:
      "user1" : "domain.tld"
  subscriber:
    user:
      "user2" : "domain.tld"

modules:
  ...
  mod_mqtt:
    access_publish:
      "/foo/bar/#":
        - allow: publisher
        - deny
      "#":
        - deny
    access_subscribe:
      "/foo/bar/#":
        - allow: subscriber
        - deny
      "#":
        - deny