如何授权或限制用户不订阅和发布 ejabberd MQTT 模块中的特定主题?
How to Authorize or limit user for not to subscribe and publish particular Topic in ejabberd MQTT module?
我正在使用 ejabberd 19.02 进行客户端之间的 MQTT 通信。
我可以使用 "external" 身份验证方法对用户进行身份验证 - 只需验证用户名和密码即可。
我还有一个要求,允许一个用户发布一个主题,而不允许另一个用户发布该主题。订阅也一样。我相信这是授权或访问控制。
如何在ejabberd MQTT服务器实现以上?
我看到了 "Access rules" 配置,但它似乎与某些用户的主题 subscription/publish 限制不匹配。
能不能像Authentication那样控制-像给外部责任一样
模块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
我正在使用 ejabberd 19.02 进行客户端之间的 MQTT 通信。 我可以使用 "external" 身份验证方法对用户进行身份验证 - 只需验证用户名和密码即可。
我还有一个要求,允许一个用户发布一个主题,而不允许另一个用户发布该主题。订阅也一样。我相信这是授权或访问控制。 如何在ejabberd MQTT服务器实现以上?
我看到了 "Access rules" 配置,但它似乎与某些用户的主题 subscription/publish 限制不匹配。
能不能像Authentication那样控制-像给外部责任一样
模块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