Emqtt - 如何为巨大的号码实现ACL。客户

时间:2016-11-18 05:51:56

标签: mqtt iot

我在下一个应用程序中使用Emqtt(emqtt.io)代理。现场是 - 我将拥有多个客户端(10,000个),每个客户端都将发布或订阅主题。但我想限制每个客户只发布和订阅有自己的客户端ID的主题 - 对于ex- 主题将是 -

my_device /的 12345 /更新

my_device /的 99998 /更新

my_device /的 88888 /更新

如果中间属性是客户端ID,我如何限制客户端仅对该特定主题执行pubs,并且没有人应该能够订阅 my_device /#因此收到我的所有邮件。

我看到了ACL插件,看到了这段代码( {允许,{用户,“仪表板”},订阅,[“$ SYS /#”]} 。)但我必须定义每一个客户手动?如果添加了新用户该怎么办,我将如何自动添加一个规则呢?因为根据我的理解,这个文件是在启动代理时加载的,对吗? 我想根据某些数据库使用ACL。你可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

Emqtt用户指南列出了一组可用于在数据库中存储ACL的插件:

http://emqtt.io/docs/v2/guide.html

该文档中的链接已中断,但项目托管在同一个git组织

答案 1 :(得分:2)

A。身份验证插件

1。登录

https://emqtt.io/docs/v2/guide.html#authentication 检查登录的很多方法

  • http
  • redis / mysql ...

2。 ACL

还可以控制ACL访问权限

  • http
  • redis / mysql ..

但内部配置更有效

B。 ACL Internel

主题模式中的魔术变种

  • %c-客户ID
  • %u-用户名

操作

  • 订阅
  • 发布
  • pubsub

acl.conf示例

允许clientid XXXclients/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