Emqtt-如何为大量客户端实现ACL

Emqtt-如何为大量客户端实现ACL,mqtt,iot,Mqtt,Iot,我正在为我的下一个应用程序使用Emqtt(Emqtt.io)代理。现场是—— 我将有多个客户端(10000个),每个客户端都将发布或订阅主题。但是我想限制每个客户端只发布和订阅包含自己客户端id的主题-例如 主题为: 我的设备/12345/update 我的设备/99998/update 我的设备/88888/update 如果中间属性是客户机ID,我如何限制客户机只对特定主题进行pub,而没有人应该能够订阅 我的设备/#,从而接收我的所有信息 我看到了ACL插件,看到了这段代码({allow,

我正在为我的下一个应用程序使用Emqtt(Emqtt.io)代理。现场是—— 我将有多个客户端(10000个),每个客户端都将发布或订阅主题。但是我想限制每个客户端只发布和订阅包含自己客户端id的主题-例如 主题为:

我的设备/12345/update

我的设备/99998/update

我的设备/88888/update

如果中间属性是客户机ID,我如何限制客户机只对特定主题进行pub,而没有人应该能够订阅 我的设备/#,从而接收我的所有信息


我看到了ACL插件,看到了这段代码({allow,{user,“dashboard”},subscribe,[“$SYS/#“]}),但我必须手动定义每个客户端?如果添加了一个新用户,我将如何自动再添加一个规则?因为据我所知,这个文件是在代理启动时加载的,对吗我想使用基于某个数据库的ACL。你能帮我吗

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


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

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


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

最好的选择是使用auth/acl插件。我更喜欢mongodb插件,但还提供了其他插件

从他们的docson github:

它非常适合身份验证,但我目前还无法使用插件设置订阅或发布


此外,如果插件在身份验证方面给您带来问题,请尝试从源代码构建您的emqtt

最好的选择是使用用于auth/acl的插件。我更喜欢mongodb插件,但还提供了其他插件

从他们的docson github:

它非常适合身份验证,但我目前还无法使用插件设置订阅或发布

此外,如果插件在身份验证方面给您带来问题,请尝试从源代码构建您的emqtt 1.登录 检查登录的很多方法

  • http
  • redis/mysql
2.国际计算语言学协会 还可以控制acl访问

  • http
  • redis/mysql
但内部配置效率更高

B.国际前交叉韧带 主题模式中的魔力变量

  • %c-客户端
  • %u-用户名
手术

  • 订阅
  • 发表
  • pubsub
acl.conf示例 允许客户端ID
XXX
sub
clients/XXX

{allow, all, subscribe, ["clients/%c"]}.
{allow, all, pubsub, ["clients/%u"]}.
允许用户名
XXX
pub/sub
clients/XXX

{allow, all, subscribe, ["clients/%c"]}.
{allow, all, pubsub, ["clients/%u"]}.
拒绝所有其他:

{deny, all}.

v4中的示例,但v2也支持
%c
%u

应用更改
$emqttd\u ctl acl重新加载
注意:所有集群节点都应该配置一个.auth插件 1.登录 检查登录的很多方法

  • http
  • redis/mysql
2.国际计算语言学协会 还可以控制acl访问

  • http
  • redis/mysql
但内部配置效率更高

B.国际前交叉韧带 主题模式中的魔力变量

  • %c-客户端
  • %u-用户名
手术

  • 订阅
  • 发表
  • pubsub
acl.conf示例 允许客户端ID
XXX
sub
clients/XXX

{allow, all, subscribe, ["clients/%c"]}.
{allow, all, pubsub, ["clients/%u"]}.
允许用户名
XXX
pub/sub
clients/XXX

{allow, all, subscribe, ["clients/%c"]}.
{allow, all, pubsub, ["clients/%u"]}.
拒绝所有其他:

{deny, all}.

v4中的示例,但v2也支持
%c
%u

应用更改
$emqttd\u ctl acl重新加载
注意:所有集群节点都应该配置