全部产品
Search
文档中心

云消息队列 MQTT 版:鉴权常见问题

更新时间:Mar 04, 2026

本文介绍云消息队列 MQTT 版终端和云端鉴权的常见问题。

终端鉴权

云端鉴权

Token鉴权和一机一密鉴权如何选择?

  • Token模式

    如果业务上需要对每个MQTT客户端的权限进行细致划分,或者仅需要对客户端授予临时的有时间期限的权限,则可以通过Token模式这种临时凭证访问方式实现。通过Token服务,您可以设置单一客户端访问的资源内容、权限级别和权限过期时间。

  • 一机一密模式

    一机一密给予MQTT客户端能够以独立的用户名、密码来进行身份识别的能力,帮助您解决客户端在不安全场景下,存在Token冒认的问题。且在一机一密模式下,用户名、密码与ClientId绑定,您可独立管理。

使用Token鉴权模式,客户端连接断开并返回“resource auth failed”错误。

使用的Token缺少对指定Topic的发布或订阅权限。您可以调用ApplyToken接口为Token授权。

申请Token权限能同时赋予多种权限吗?

不能,一次只能对同一批资源赋予一种权限。如果想对TopicA授予写权限,对TopicB授予读权限,需要调用两次 ApplyToken接口分别授权。

为什么已经调用Token授权了,还是鉴权失败?

客户端需要等到确认Token更新成功后再进行发布或订阅操作,否则可能会导致鉴权失败。

如何针对Token进行监控?

Token失效过期前5分钟会给客户端推送过期提醒信息,到期后会自动断连。过期提示如下,您可以直接监控$SYS/tokenInvalidNotice Topic来接收通知,根据通知里的code判断鉴权失败的原因。

$SYS/tokenExprireNotice,body is {"exprireTime":1655798142873,"type":"RW"}

ApplyToken接口一次最大可操作多少资源?

默认每个Token最多一次操作100个资源。如果您的实例为铂金版,您可以申请提高上限值。如需申请,请联系云消息队列 MQTT 版技术支持,钉钉群号:116015007918。

调用注册访问凭证接口返回“deviceCredential num exceed”错误。

设备访问凭证的配额与实例规格中的连接数对等,达到配额上限后将无法为新设备申请访问凭证,您可以通过为实例升配提高访问凭证的配额,具体操作,请参见实例升降配

使用一机一密认证方式时,对于不再使用的设备凭证,请您及时调用UnRegisterDeviceCredential接口注销设备访问凭证,以免占用访问凭证的配额。

一机一密中Password的签名计算方法是什么?

Charset charset = Charset.forName("UTF-8");          
Mac mac = Mac.getInstance("HmacSHA1");          
mac.init(new SecretKeySpec(secretKey.getBytes(charset), algorithm));          
byte[] bytes = mac.doFinal(text.getBytes(charset));         
return new String(Base64.encodeBase64(bytes), charset);

最终得到的Base64编码的字符串即为Password。

为什么给Group配置拒绝发布权限,依然可以发布消息?

给指定Group授予拒绝发布的权限(Deny mq:PUB),该Group依然可以用于发布消息。

您需要重新连接下客户端,Group的权限仅在客户端重连时校验。

自定义权限策略是否支持多级Topic?

自定义权限策略,支持将权限精确到多级Topic。

客户端如何监听和更新即将失效的Token?

详细信息,请参见客户端监听即将失效的Token信息(无需订阅)

使用Token鉴权的MQTT客户端,默认可以在mqttClient.setCallback的messageArrived方法中接收Token即将失效的通知消息,无需额外订阅。

收到Token即将失效的通知后,您可以向$SYS/uploadToken主题发送新的Token信息,及时更新服务端Token。

一机一密的访问凭证上限是多少?

一机一密的访问凭证上限与实例的最大连接数相同。如需提升上限,可通过增加实例连接数来增加访问凭证上限。

需要注意以下事项:

1. 一机一密的访问凭证上限和在线连接数分开计算。

2. 一机一密的访问凭证申请后,如不主动删除将持续占用额度。

更多信息,请参见一机一密鉴权模式

一机一密鉴权方式为什么不支持mq:PUB?

使用一机一密鉴权方式时,不支持通过mq:PUB限制客户端仅有发送消息的权限。如需单独配置mq:PUB和mq:SUB权限,请使用Signature鉴权或Token鉴权方式。

签名鉴权是否受 AccessKey 的 RAM 权限限制?

是的,签名鉴权受 RAM 权限限制。

Token 鉴权是否受 AccessKey 的 RAM 权限限制?

Token 鉴权不受 RAM 权限限制。只要拥有调用 ApplyToken 接口的权限并成功申请到对应资源的 Token,该 Token 即可被使用。

Token 相关 OpenAPI 的 RAM 权限如何配置?

请按照文档进行配置。由于 RevokeToken 和 QueryToken 这两个接口目前无法区分实例,RAM 策略需要按以下方式配置:

{ "Effect": "Allow", "Action": [ "mq:RevokeToken", "mq:QueryToken" ], "Resource": "acs:mq:*:*:*" }