我在下一个应用程序中使用Emqtt(emqtt.io)代理。现场是 - 我将拥有多个客户端(10,000个),每个客户端都将发布或订阅主题。但我想限制每个客户只发布和订阅有自己的客户端ID的主题 - 对于ex- 主题将是 -
my_device /的 12345 /更新
my_device /的 99998 /更新
my_device /的 88888 /更新
如果中间属性是客户端ID,我如何限制客户端仅对该特定主题执行pubs,并且没有人应该能够订阅 my_device /#因此收到我的所有邮件。
我看到了ACL插件,看到了这段代码( {允许,{用户,“仪表板”},订阅,[“$ SYS /#”]} 。)但我必须定义每一个客户手动?如果添加了新用户该怎么办,我将如何自动添加一个规则呢?因为根据我的理解,这个文件是在启动代理时加载的,对吗? 我想根据某些数据库使用ACL。你可以帮助我吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
https://emqtt.io/docs/v2/guide.html#authentication 检查登录的很多方法
还可以控制ACL访问权限
但内部配置更有效
主题模式中的魔术变种
操作
允许clientid XXX
子clients/XXX
:
{allow, all, subscribe, ["clients/%c"]}.
允许用户名XXX
发布/订阅clients/XXX
:
{allow, all, pubsub, ["clients/%u"]}.
拒绝其他所有内容
:{deny, all}.
https://github.com/emqx/emqx/wiki/ACL-Design#examples
v4中的示例,但v2还支持%c
%u
$ emqttd_ctl acl reload
注意:所有群集节点都应配置
答案 2 :(得分:1)
最佳选择是使用auth / acl插件。我更喜欢mongodb插件,但还提供了其他插件。
来自他们的docson github:MongoDB plugin setup for emqtt
它非常适合身份验证,但我目前还无法使用插件设置进行订阅或发布。
此外,如果插件给您带来身份验证问题,请尝试从源代码构建您的emqtt