Skip to content

认证

认证用于确认客户端身份,防止未授权连接进入 Broker。

认证是什么

在 MQTT 场景中,认证是客户端接入链路中的第一道关口。
客户端在 CONNECT 阶段提交身份信息(如用户名/密码、令牌等),Broker 根据认证配置判定该连接是否允许建立。

认证解决的是“你是谁、能不能进来”的问题;
授权(ACL)解决的是“你进来后能做什么”的问题。两者职责不同,但会在同一条连接链路中连续执行。

认证提供的能力

  • 身份校验:校验客户端提交的凭据是否合法;
  • 接入控制:认证失败直接拒绝连接,避免无效会话占用资源;
  • 可扩展认证器:支持按认证类型扩展新的鉴权方式;
  • 高频路径优化:认证热路径以缓存优先,降低外部依赖抖动影响;
  • 与 ACL/黑名单协同:认证结果进入连接上下文,供后续访问控制复用。

登录鉴权流程(链式模型)

登录鉴权按“认证链”思路组织,每个认证器都是链路中的一个节点。

处理步骤

  1. 客户端发起 CONNECT,携带登录信息;
  2. Broker 先完成基础合法性检查(协议字段、客户端信息、会话前置条件等);
  3. 进入认证链,按配置顺序选择认证器;
  4. 认证器执行实际校验(例如 Password)并返回结果;
  5. 认证通过:建立连接上下文并继续会话流程;认证失败:返回 CONNECT 失败;
  6. 认证结果进入运行态,供 ACL、黑名单、审计与指标采集使用。

结果语义

  • 通过(Allow):连接可继续建立;
  • 拒绝(Deny):连接终止并返回失败原因;
  • 异常(Error):视为鉴权失败处理,避免“异常放行”。

当前实现状态

当前生产可用的主认证方式是 Password 认证。
建议先以单一主认证器稳定运行,再按业务需求逐步引入更多认证器。

当前已支持的鉴权方式

后续扩展

🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀