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

如何授权或限制用户不订阅和发布ejabberd MQTT模块中的特定主题?,mqtt,ejabberd,ejabberd-auth,Mqtt,Ejabberd,Ejabberd Auth,我使用Ejabberd19.02在客户端之间进行MQTT通信。 我可以使用“外部”身份验证方法对用户进行身份验证—只需验证用户名和密码 我还要求允许一个用户发布一个主题,不允许另一个用户发布该主题。订阅也是如此。我认为这是授权或访问控制。 如何在ejabberd MQTT服务器中实现上述功能 我看到了“访问规则”配置,但它似乎与某些用户的主题订阅/发布限制不匹配 它可以像身份验证一样进行控制吗?比如外部赋予责任模块mod_mqtt提供了两个访问控制选项:access\u subscribe和ac

我使用Ejabberd19.02在客户端之间进行MQTT通信。 我可以使用“外部”身份验证方法对用户进行身份验证—只需验证用户名和密码

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

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


它可以像身份验证一样进行控制吗?比如外部赋予责任

模块
mod_mqtt
提供了两个访问控制选项:
access\u subscribe
access\u 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

非常感谢。这个回答几乎符合我的期望。还有一个疑问。我们将拥有数百万用户,用户是动态的。所以我们不能将用户名添加到yml文件中。如何处理这个动态用户添加场景?ejabberD是否有扩展,以便我可以检查用户的jabber id并控制访问发布和订阅