如果您需使用微消息队列 MQTT 的签名鉴权模式,可根据本文提供的签名计算方式获取签名,再使用控制台来验证计算得出的签名是否正确。

签名计算方式

按照鉴权概述的描述,如果选择签名校验模式,MQTT 客户端实际连接 MQTT 消息服务器时,connect 报文中的 Username 和 Password 需要按照本文约定的规范设置,具体设置和计算方法如下:

  • Username

    由鉴权模式名称、AccessKeyId 和 InstanceId 三部分组成,以 “|” 分隔。签名模式下鉴权模式设置为 Signature

    举例:一个客户端的 Client ID 是 GID_Test@@@0001,使用的实例 ID 是 mqtt-xxxxx,使用的 AccessKeyId 是 YYYYY,则签名模式的 UserName 应该设置成 Signature|YYYYY|mqtt-xxxxx

    Client ID 的详细说明请参见名词解释

  • Password

    对 Client ID 签名的结果。具体计算方法如下:

    举例:一个客户端的 Client ID 是 GID_Test@@@0001,使用的 AccessKeySecret 是 XXXXX。

    用 XXXXX 作为秘钥,使用 HMAC-SHA1 方法对待签名字符串 GID_Test@@@0001 做签名计算得到一个二进制数组,再对该二进制数组做 Base64 编码得到最终的 Password 签名字符串。

    HMAC-SHA1 的算法实现,各个语言都有现成的函数库,请自行搜索,或者参见微消息队列 MQTT 使用签名模式收发消息的示例代码中设置 Username 和 Password 的部分。

使用控制台验证签名

微消息队列 MQTT 控制台提供了签名计算工具,以方便您比对验证自己的签名计算是否正确。

微消息队列 MQTT 控制台左侧导航栏,单击签名校验,然后输入程序使用的账号的 AccessKeyId、AccessKeySecret 以及 Client ID,即可得到程序中需要设置的 Username 和 Password 参数。

说明

此工具仅仅使用浏览器前端 JavaScript 完成计算,并不会传输 AccessKeySecret 到消息队列 MQ 后端,因此不用担心 AccessKeySecret 泄漏的风险。实际业务中控制台仅仅是用来排查问题比对数据。

签名计算可以放在客户端或者更安全的服务端计算完成后下发给 MQTT 客户端。