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