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

使用 JWT 进行认证

最近更新时间:2026-08-05 11:46:01
我的收藏
JWT 认证是基于 Token 的鉴权机制,不依赖服务端保留客户端的认证信息或者会话信息,客户端在密码字段或单独字段中提交 JWT,MQTT 将验证 JWT 的签名和声明信息,验证通过后服务端接受客户端连接请求。

什么是 JWT?

JSON Web Token(详细参见 RFC 7519)作为一种用于定义网络传输 JSON 对象的标准,经常被运用到基于 Token 的认证解决方案中。
整体的认证原理如下图所示:应用程序从身份识别和访问管理服务(IAM)获取 JWT,客户端在连接请求中携带 JWT,MQTT 服务端将使用预先配置的签名方式(下图的示例为公钥证书集的方式,也可以使用其他签名方式)对收到的 JWT 进行验证,如果内容一致,说明在传输过程中 Token 没有被篡改,认证成功;反之认证失败。


MQTT 基于 JWT 的认证原理

腾讯云消息队列 MQTT 版支持客户对接外部 JWT 服务进行认证和授权。
客户端使用用户名或密码字段携带 JWT,在发起连接时(发送 CONNECT Packet 时),MQTT 服务端会使用配置的密钥进行签名验证,判断 JWT 签名是否有效,以防被伪造或篡改。
当签名验证通过后,MQTT 服务端会进一步检查 Payload 中的声明信息(Claims),例如 iss(Issuer、签发者)、exp(Expiration Time、过期时间)、nbf(Not Before、生效时间)、iat(Issued At、签发时间)、aud(Audience、受众) 等, 判断 JWT 的合法性。
exp (过期时间):校验令牌是否已过期。连接建立后会持续监测,一旦令牌过期,服务端将主动断开客户端连接。
nbf (生效时间):检查令牌是否已经生效。比如令牌在5分钟后生效,那么5分钟前尝试连接会被拒绝。
当 JWT 通过签名验证和 Claims 检查后, MQTT 服务端接受客户端连接请求。

前提条件

客户需要自行实现 JWT 服务用于给客户端分发 JWT Token,并且对应的签名算法要和下文在控制台配置的内容一致,您可以使用 JWT 官方提供的 JWT 调试器调试。您也可以使用自有的 JWKS(Json Web Key Set)服务器进行认证,请保证 JWKS 服务器可用并可以通过 腾讯云 TDMQ MQTT 的服务端访问到。
另外,为了保证认证的安全性,您还需要注意以下几点:
1. JWT 的 Payload 部分请勿携带敏感信息。
2. JWT 本身包含认证信息,一旦泄露,JWT 持有者将获得该令牌的所有权限。为了减少风险,JWT 有效期不宜过长。
3. 为了安全考量,JWT 应按业务场景分别授予。
4. 传输链路应该安全,应避免使用明文公网传输。

配置 JWT 认证

1. 登录 MQTT 控制台
2. 在左侧导航栏单击资源管理 > 集群管理,选择好地域后,单击要配置证书的集群的“ID”,进入集群基本信息页面。
3. 单击认证管理,切换至 JWT 认证和授权。单击开启认证

4. 在弹窗内完成 JWT 认证和授权的相关配置,认证方式支持 JWTJWKS 两种。
JWT 认证
JWKS 认证
请根据下面说明完成配置:
认证字段:指定 MQTT 客户端在连接时使用 CONNECT Packet 的 Username 或者 Password 字段携带 JWT Token。
签名方式:JWT Token 的签名算法,当前支持 HMAC-based 和 公钥(public-key)两种方式的各类主要算法。使用公钥时请填写 .pem 文件格式的密钥。
密钥:根据不同签名方式的选择,填写对应的密钥,密钥内容由客户根据加密规范自行定义。
说明:非必填,按需填写,不能超过128个字符。

腾讯云消息队列 MQTT 版也支持客户使用 JWKS(Json Web Key Set)的形式来使用 JWT 进行认证,请根据下面说明完成配置:
认证字段:指定 MQTT 客户端在连接时使用 CONNECT Packet 的 Username 或者 Password 字段携带 JWT Token。
认证信息来源:支持 服务器认证JSON 认证两种方式。
服务器认证MQTT 服务端将动态从您指定的 JWKS 端点获取公钥集合并自动刷新。
当您的 IAM 提供的 JWKS 端点公网可以访问时,请选择服务器认证
服务器地址:填写 IAM 服务提供的 JWKS 端点的基础域名即可,例如端点为https://{IAM域名}/.well-known/jwks.json,则此处只需填写 https://{IAM 域名}(不需要包含 /.well-known/jwks.json 部分)系统会自动拼接标准 OIDC 路径。请参见您的 IAM 服务提供方文档,如 Auth0等,按其要求获取符合 OIDC 规范 的 JWKS 地址。
刷新时间:MQTT 服务端从 IAM 服务拉取公钥集合的间隔。默认值为 60s。

JSON 认证:当 IAM 提供方的 JWKS 端点服务与 MQTT 服务端之间网络不通时,可选择 JSON 认证。您需要手动维护固定的公钥集合,MQTT 服务端将根据请求选用公钥集中的相应公钥进行验签,并校验 JWT 中的 exp(过期时间)、nbf(生效时间)、iat(签发时间)等声明字段的有效性。
操作步骤:
从您的 IAM 提供方获取 JWKS 公钥内容(通常可通过浏览器访问 https://{IAM 域名}/.well-known/jwks.json 下载)。
将获取的 jwks.json 文件内容完整复制到下方文本框中。




5. 填写完成后,单击保存