如果您需使用云消息队列 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签名字符串。
使用控制台验证签名
云消息队列 MQTT 版控制台提供了签名计算工具,以方便您比对验证自己的签名计算是否正确。
- 登录云消息队列 MQTT 版控制台。
- 在左侧导航栏单击实例列表。
- 在顶部菜单栏选择地域。
- 在实例列表中找到目标实例,单击实例名称或在其操作列单击详情。
- 在左侧导航栏单击签名校验。
- 在签名校验页面,输入程序使用的账号的AccessKey ID、AccessKey Secret以及Client ID,单击计算签名即可得到程序中需要设置的Username和Password参数。
此工具仅仅使用浏览器前端JavaScript完成计算,并不会传输AccessKey Secret到云消息队列 RocketMQ 版后端,因此不用担心AccessKey Secret泄漏的风险。实际业务中控制台仅仅是用来排查问题比对数据。
签名计算可以放在客户端或者更安全的服务端计算完成后下发给MQTT客户端。