在这一节,我们讨论一下设备的权限管理。
什么是设备权限管理
设备权限管理是指对一个设备的 Publish 和 Subscribe 权限进行控制,设备只能 Publish 到它有 Publish 权限的主题上,同时它也只能 Subscribe 有 Subscribe 权限的主题。
为什么要控制 Publish 和 Subscribe
场景1 ClientA 订阅主题 command/ClientA 来接收服务器端的指令,这时 ClientB 接入,也同时订阅command/usernameA,那么在服务器向 ClientA 下发指令时,ClientB 也能收到,同时 ClientB 也可以将收到的指令再 Publish 到 command/ClientA, ClientA 无法肯定指令是否来自于正确的对象。
场景2 ClientA 向主题 data/ClientA 发布数据,这时 ClientB 接入,它也向 data/ClientA 发布数据,那么data/ClientA 的订阅者无法肯定数据来源是否为 ClientA。
在这两个场景下都存在安全和数据准确性的问题,但是如果我们能控制 Client 的权限,让 ClientA 才能订阅 command/ClientA,同时也只有 ClientA 才能发布到 /data/ClientA,那么刚才的问题就都不存在了。
这就是我们需要对设备的 Publish 权限和 Subscribe 权限进行控制的原因。
EMQ X 的 ACL(权限管理)功能
EMQ X 的 ACL 功能也是由插件来实现的,本课程里使用的 MongoDB 认证插件就包含 ACL 功能,在设备注册的章节里我们暂时关闭了这