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

签名计算方式

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

  • Username

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

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

    Client ID的更多信息,请参见名词解释

  • Password

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

    举例:一个客户端的Client ID是GID_Test@@@0001,使用的AccessKey Secret(secretKey)是XXXXX。

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

    说明
    • Username和Password的计算方法已经被封装到云消息队列 MQTT 版的终端SDK中,您无需单独计算。SDK下载地址,请参见SDK下载
    • HMAC-SHA1的算法实现,Java SDK可以参见Demo工程中的ConnectionOptionWrapperTools类的示例代码。其他语言都有现成的函数库,请自行搜索。

使用控制台验证签名

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

  1. 登录云消息队列 MQTT 版控制台
  2. 在左侧导航栏单击实例列表
  3. 在顶部菜单栏选择地域。
  4. 在实例列表中找到目标实例,单击实例名称或在其操作列单击详情
  5. 在左侧导航栏单击签名校验
  6. 签名校验页面,输入程序使用的账号的AccessKey ID、AccessKey Secret以及Client ID,单击计算签名即可得到程序中需要设置的Username和Password参数。签名校验
说明

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

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