0

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

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

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

它可以像身份验证一样被控制吗?就像给外部责任一样

4

1 回答 1

1

该模块mod_mqtt提供了两个访问控制选项:access_subscribeaccess_publish。前者可用于限制订阅者的访问,后者可用于限制发布者的访问。两者都接受映射filter: rulewherefilter是 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
于 2019-05-17T14:16:21.317 回答