认证
认证用于确认客户端身份,防止未授权连接进入 Broker。
认证是什么
在 MQTT 场景中,认证是客户端接入链路中的第一道关口。
客户端在 CONNECT 阶段提交身份信息(如用户名/密码、令牌等),Broker 根据认证配置判定该连接是否允许建立。
认证解决的是“你是谁、能不能进来”的问题;
授权(ACL)解决的是“你进来后能做什么”的问题。两者职责不同,但会在同一条连接链路中连续执行。
认证提供的能力
- 身份校验:校验客户端提交的凭据是否合法;
- 接入控制:认证失败直接拒绝连接,避免无效会话占用资源;
- 可扩展认证器:支持按认证类型扩展新的鉴权方式;
- 高频路径优化:认证热路径以缓存优先,降低外部依赖抖动影响;
- 与 ACL/黑名单协同:认证结果进入连接上下文,供后续访问控制复用。
登录鉴权流程(链式模型)
登录鉴权按“认证链”思路组织,每个认证器都是链路中的一个节点。
处理步骤
- 客户端发起
CONNECT,携带登录信息; - Broker 先完成基础合法性检查(协议字段、客户端信息、会话前置条件等);
- 进入认证链,按配置顺序选择认证器;
- 认证器执行实际校验(例如 Password)并返回结果;
- 认证通过:建立连接上下文并继续会话流程;认证失败:返回
CONNECT失败; - 认证结果进入运行态,供 ACL、黑名单、审计与指标采集使用。
结果语义
- 通过(Allow):连接可继续建立;
- 拒绝(Deny):连接终止并返回失败原因;
- 异常(Error):视为鉴权失败处理,避免“异常放行”。
当前实现状态
当前生产可用的主认证方式是 Password 认证。
建议先以单一主认证器稳定运行,再按业务需求逐步引入更多认证器。
当前已支持的鉴权方式
后续扩展
- JWT 认证(占位,后续补充)
