我正在使用ejabberd 19.02进行客户端之间的MQTT通信。 我可以使用“外部”身份验证方法对用户进行身份验证-只需验证用户名和密码即可。
我还要求允许一个用户发布一个主题,而另一个用户不允许发布该主题。订阅也是如此。我相信它是授权或访问控制。 如何在ejabberd MQTT服务器中实现以上目标?
我看到了“访问规则”配置,但似乎与某些用户的主题订阅/发布限制不匹配。
是否可以像身份验证一样进行控制-如将责任授予外部
答案 0 :(得分:1)
模块mod_mqtt
提供了两种访问控制选项:access_subscribe
和access_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