帮你快速理解、总结文档立即下载

认证方式概述

最近更新时间:2026-08-06 11:20:30
我的收藏

概述

消息队列 MQTT 版提供了多种认证方式以保证服务端与客户端之间通信的安全性,客户端接入时,将按照配置的认证方式对客户端的身份进行验证,通过认证后才被允许接入,确保设备的合法接入。
MQTT 的安全机制由两层组成,两层独立工作、可叠加生效:
传输层:是 MQTT 协议体系的底层通信基础,它负责在 MQTT 客户端与服务端之间建立安全通信通道,包括 TLS 加密、服务端证书校验等。该层并非 MQTT 协议本身的一部分,而是依赖于现有的网络传输协议来实现其功能。
应用层:是 MQTT 应用协议中的一个核心安全组件,作用于连接建立阶段。它负责对尝试连接到服务端的客户端身份进行验证,确保只有经过授权的客户端才能接入服务并访问系统资源。
层级
作用阶段
能做什么
涉及的认证方式
传输层(TLS 层)
TCP 连接建立时的 TLS 握手阶段
加密通道 + 基于 X.509 证书的握手校验
单向认证(TLS)、双向认证(mTLS)、一机一证(握手部分)
应用层(MQTT 协议层)
TLS 握手完成之后、发送 CONNECT 报文时
基于凭证/令牌的业务身份验证
用户名+密码、JWT 认证、外部 HTTP 认证、一机一密、一机一证(身份判定)
注意:
传输层和应用层是 AND 关系。如果同时启用了“双向认证(mTLS)”和“用户名 + 密码”,客户端必须同时通过两层验证才能接入。

X.509 证书认证

X.509 是一种标准的公钥证书格式,广泛用于互联网的安全通信中。消息队列 MQTT 版支持基于 X.509 证书建立传输层加密连接与认证能力,以实现更高级别的通信安全保障。消息队列 MQTT 版当前支持以下 X.509 证书认证方式:
说明:
TLS/mTLS 本身不是一种客户端业务身份认证方式,客户端的身份验证仍需通过应用层的用户名+密码 / JWT / HTTP 等应用层认证完成。
X.509 证书相关的三种认证配置:单向认证(TLS)、双向认证(mTLS)、一机一证互斥,在同一时刻只能选择其中一种。
一机一证在传输层和应用层都有逻辑:TLS 握手做证书校验、应用层认证器链中把证书直接转换为业务身份,启用一机一证后,后续应用层认证器不会再执行,即其他应用层认证方式不会生效。

应用层认证

应用层的认证方式基于认证器链(Authenticator Chain)模型,默认所有支持的认证器可以共存。消息队列 MQTT 版当前支持以下认证方式:

认证器链工作机制

客户端发送 CONNECT 报文后,MQTT 集群按顺序逐个调用已启用的认证器,每个认证器只会返回三种结果之一:
认证器返回
含义
链路行为
NOT_FOUND
客户端没有提供该认证器所需的凭证(例如未提供 JWT)
继续走下一个认证器
ALLOW
凭证校验通过
立即放行,后续认证器不再执行
DENY / QUOTA_EXCEEDED
凭证校验拒绝(密码错误、配额超限等)
立即拒绝,后续认证器不再执行
流程示意图:

判定规则:
短路通过:任一认证器返回 ALLOW,立即放行,后续认证器不再执行。
跳过继续:认证器返回 NOT_FOUND(客户端未携带其所需凭证),链条继续走下一个。
短路拒绝:任一认证器返回 DENYQUOTA_EXCEEDED(凭证错误或超限),立即拒绝,后续不再执行。
全部跳过:所有已启用认证器都返回 NOT_FOUND(客户端没有提交任何可识别凭证),最终也按 DENY 处理,拒绝接入。

适用场景

认证方式
说明
基础版
(已售罄)
专业版
铂金版
适用场景
用户名+密码认证
最基础的认证方式,客户端在连接时提供用户名(Username)和密码(Password),MQTT 将其与内部存储的凭证进行匹配,匹配通过后接受客户端请求。
通用场景,安全性要求不高。
X.509 证书认证
单向认证(TLS):由客户端认证服务端,客户端对服务端的认证通过服务端证书完成。服务端会使用您选择的证书和客户端建联。
对安全性要求一般,或者测试场景。
双向认证(mTLS):客户端与服务端之间相互认证,客户端对服务端的认证通过服务端证书完成,服务端对客户端的认证通过 CA 证书完成。验证通过则允许客户端连接服务端。
设备价值较高,对安全性要求较高。
一机一证:一种特殊的双向认证,每个客户端(每台设备)使用自行签发的 CA 证书及 CA 证书签发的不同的客户端证书(设备证书)进行认证。
×
设备价值极高,对安全性要求极高。
JWT 认证
JWT 认证是基于 Token 的鉴权机制,不依赖服务端保留客户端的认证信息或者会话信息,客户端在密码字段或单独字段中提交 JWT,MQTT 将验证 JWT 的签名和声明信息,验证通过后服务端接受客户端连接请求。
×
面向终端用户或临时会话,实现灵活的、带有时效性和自定义权限的动态鉴权。
HTTP 认证
客户端连接时,MQTT 将使用客户端信息构造 HTTP 请求,并根据请求返回的内容判断认证结果,认证通过,则允许该客户端连接服务端。
×
需要与企业现有统一身份认证体系集成的鉴权场景。
一机一密
每台设备使用独立的密钥,用于连接服务端进行认证。这个密钥是设备身份的唯一证明,用于连接服务端时的认证。
×
对安全有较高的诉求, 但是设备本身的算力比较有限, 无法支持使用基于 PKI 证书的“一机一证”。

选型建议

业务诉求
推荐组合
说明
通用业务,只需加密 + 简单身份识别
单向认证(TLS) + 用户名密码
最常见入门组合
需要时效性权限、面向终端用户
单向认证(TLS) + JWT(可叠加用户名密码作为兜底)
利用 JWT 控制细粒度权限
已有企业统一身份系统
单向认证(TLS) + HTTP 外部认证
把身份判定下沉到外部服务
中高安全要求、设备有证书能力
双向认证(mTLS) + 用户名密码 / JWT
mTLS 做传输层互验,应用层确定业务身份
极高安全要求、车联网/高价值设备
一机一证
证书直接 = 身份,开箱即用
高安全要求、但设备算力有限
单向认证(TLS)/ 双向认证(mTLS)+ 一机一密
mTLS/TLS 提供传输层安全,一机一密在应用层确定每台设备的业务身份,两者分属不同层级。

常见问题

Q1:可以同时开启“用户名 + 密码”和“JWT”吗?

可以。两者都是应用层认证器,默认共存。如果客户端同时提交两类凭证,会按照认证器链的顺序执行。

Q2:“一机一密”和“一机一证”可以同时启用吗?

技术上可以同时启用,但二者属于不同的认证哲学(对称密钥 vs PKI 证书),同一台设备不建议两种都用。一般做法是整批设备二选一。

Q3:启用一机一证后,HTTP 外部认证、用户名密码还会被调用吗?

实际上不会。原因不是“应用层认证链被关闭”,而是开启一机一证后:
在 TLS 握手阶段,会强制要求客户端出示一张由用户 CA 签发的有效证书,无证书或证书无效的客户端在 TCP 层就被断开,根本走不到 CONNECT。
通过 TLS 握手后,客户端的证书会被一机一证认证器直接判定为 ALLOW,链路短路,后续的认证器不会再被调用。
因此从效果看,“启用一机一证 = 应用层只剩一机一证生效”,但底层机制是 TLS 握手拦截 + 链路短路,不是配置层面的互斥。