您可以通过 Dashboard 可视化页面来快速配置 MQTT 的授权机制,无需编写代码或手动编辑配置文件,即可实现对 MQTT 客户端连接后的发布和订阅操作进行权限控制。本文档介绍 MQTT 客户端授权的原理、支持的授权资源以及授权流程。
授权原理
授权指对 MQTT 客户端的发布和订阅操作进行权限控制。当客户端尝试发布或订阅时,MQTT 会根据特定的流程或用户定义的查询语句,从指定数据源中获取该客户端的权限数据,将获取的权限与客户端要执行的操作进行匹配,并根据匹配结果允许或拒绝本次操作。
客户端的权限列表需要提前存储到特定的数据源中,然后在 MQTT 中创建基于相应数据源类型的授权检查器。
授权数据源
授权数据源用于存储客户端授权规则,在 MQTT Dashboard 客户端授权页面中,您可快速创建基于各类数据源的授权检查器。目前支持文件、内置数据库以及 MySQL 3种数据源。
- 文件:使用 ACL 文件来编辑和保存授权规则内容。
- 内置数据库:使用 MQTT 内置数据库来编辑和保存授权规则内容,支持通过 Dashboard 配置授权规格,具体操作步骤,请参见配置内置数据库授权规则。
- MySQL:使用云数据库(MySQL 版)来编辑和保存授权规则内容,通过指定的 SQL 查询语句获取客户端权限数据。
注意事项
- 单个 MQTT 实例中创建的授权检查器类型不能重复。
- 授权数据源需与 MQTT 实例处于相同 VPC 内。
- 为避免授权检查出错,请在必要时停用或删除基于 ACL 文件的授权检查器,因为 ACL 文件末尾包含的特殊规则
{allow, all}
默认允许所有请求。
授权检查流程
支持在单个 MQTT 实例中创建多个授权检查器构成授权链,以实现更灵活的授权检查。MQTT 将按照授权链中配置的检查器顺序依次执行授权检查。
授权检查流程如下:
- 当前授权检查器执行时检索到了客户端的权限信息,匹配当前执行的操作与客户端的权限信息:
- 操作与权限匹配,根据权限允许或拒绝客户端的操作;
- 操作与权限不匹配,交由下一授权检查器继续检查。
- 当前授权检查器执行时没有检索到客户端的权限信息,继续检查授权链中是否存在其他授权检查器:
- 如存在,则跳过当前授权检查器,并将请求交由下一授权检查器继续检查。
- 如不存在,则根据未匹配时执行参数配置,允许或拒绝客户端的操作。
您可在 Dashboard 授权设置面板中配置未匹配时执行参数,具体操作请参见配置授权。