本文档介绍 MQTT 支持的客户端认证方式、创建认证的注意事项以及认证链等信息。
认证方式
MQTT Dashboard 提供了开箱即用的客户端认证与权限管理功能,您可在 Dashboard 可视化界面快速实现客户端认证授权机制的配置,无需编写代码或手动编辑配置文件,即可对接各类数据源与认证服务。
目前 MQTT 提供了三种客户端认证方式,您可结合实际业务场景选择。
- Password-Based
使用客户端 ID 或用户名 + 密码的认证方式。当 MQTT 客户端尝试连接 MQTT 实例时,需提供身份凭证信息,MQTT 会在指定的数据源中发起查询,并将返回得到的密码与客户端提供的身份信息进行匹配,若匹配成功,则接收该客户端请求。
Password-Based 认证方式下支持集成的数据源包括内置数据库和 MySQL。 - JWT
基于 Token 的认证机制。JWT 认证方式下,无需额外的数据源来保存客户端认证信息,
客户端可以在用户名或密码字段中携带 JWT token,MQTT 通过预先配置的密钥或公钥,对 JWT 签名进行验证。 - SCRAM
MQTT 增强认证方式,支持将认证数据存储在内置数据库中,可实现对客户端和服务器的双向认证。
MQTT 认证器
按照认证方式和数据源来划分,MQTT 内置了以下 4 种认证器,您可点击下表中的连接,获取各种认证器的创建步骤。
注意事项
- MQTT 默认未开启认证功能,即允许所有客户端连接,但可能存在一些非法客户端,建议您提前配置好至少一种认证方式。
- 单个 MQTT 实例中最多支持创建 2 个认证器。
- 单个 MQTT 实例中创建的认证器类型不能重复。
- 在创建认证器后,MQTT 客户端需要配置对应的认证信息,才可以安全连接到 MQTT。
- 认证数据源需与 MQTT 实例处于相同 VPC 内。
认证流程
单个 MQTT 实例中最多允许创建 2 个认证器构成一条认证链,认证器将按照在链中的位置顺序执行,如果在当前认证器中未检索到身份凭证,将会切换至链上下一个启用的认证器继续认证。
以 Password-Based 认证方式为例,认证流程通常如下:
- 当前认证器执行时检索到了匹配的认证信息,例如用户名一致:
- 密码完全匹配,则客户端认证通过,允许连接。
- 密码无法匹配,则客户端认证失败,拒绝连接。
- 当前认证器执行时没有检索到匹配的认证信息,例如在数据源中没有查找到数据:
- 当前认证器之后还有认证器:忽略认证,交由下一认证器继续认证。
- 前认证器已经是链中最后一个认证器:客户端认证失败,拒绝连接。