如果您需使用云消息队列 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,使用的AccessKey Secret是XXXXX。

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

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

使用控制台验证签名

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

  1. 登录云消息队列 MQTT 版控制台,在顶部菜单栏,选择地域(Region)。
  2. 在左侧导航栏,单击签名校验
  3. 签名校验页面,输入程序使用的账号的AccessKey ID、AccessKey Secret以及Client ID,单击计算签名即可得到程序中需要设置的Username和Password参数。console_signature_tool
说明

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

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