我正在使用 ejabberd 19.02 进行客户端之间的 MQTT 通信。我可以使用“外部”身份验证方法对用户进行身份验证 - 只需验证用户名和密码。
我还要求允许一个用户发布一个主题,而不允许另一个用户发布该主题。订阅也是如此。我相信这是授权或访问控制。如何在 ejabberd MQTT 服务器上实现上述功能?
我看到了“访问规则”配置,但它似乎与某些用户的主题订阅/发布限制不匹配。
它可以像身份验证一样被控制吗?就像给外部责任一样
我正在使用 ejabberd 19.02 进行客户端之间的 MQTT 通信。我可以使用“外部”身份验证方法对用户进行身份验证 - 只需验证用户名和密码。
我还要求允许一个用户发布一个主题,而不允许另一个用户发布该主题。订阅也是如此。我相信这是授权或访问控制。如何在 ejabberd MQTT 服务器上实现上述功能?
我看到了“访问规则”配置,但它似乎与某些用户的主题订阅/发布限制不匹配。
它可以像身份验证一样被控制吗?就像给外部责任一样
该模块mod_mqtt
提供了两个访问控制选项:access_subscribe
和access_publish
。前者可用于限制订阅者的访问,后者可用于限制发布者的访问。两者都接受映射filter: rule
wherefilter
是 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