如果您需使用云消息隊(duì)列 MQTT 版的簽名鑒權(quán)模式,可根據(jù)本文提供的簽名計(jì)算方式獲取簽名,再使用控制臺(tái)來驗(yàn)證計(jì)算得出的簽名是否正確。

簽名計(jì)算方式

按照鑒權(quán)概述的描述,如果選擇簽名校驗(yàn)?zāi)J剑琈QTT客戶端實(shí)際連接MQTT消息服務(wù)器時(shí),connect報(bào)文中的Username和Password需要按照本文約定的規(guī)范設(shè)置,具體設(shè)置和計(jì)算方法如下。

  • Username

    由鑒權(quán)模式名稱、AccessKey ID和InstanceId三部分組成,以“|”分隔。簽名模式下鑒權(quán)模式設(shè)置為Signature

    舉例:一個(gè)客戶端的Client ID是GID_Test@@@0001,使用的實(shí)例ID是mqtt-xxxxx,使用的AccessKey ID(accessKey)是YYYYY,則簽名模式的Username應(yīng)該設(shè)置成Signature|YYYYY|mqtt-xxxxx

    Client ID的更多信息,請(qǐng)參見名詞解釋

  • Password

    對(duì)Client ID簽名的結(jié)果。具體計(jì)算方法如下:

    舉例:一個(gè)客戶端的Client ID是GID_Test@@@0001,使用的AccessKey Secret(secretKey)是XXXXX。

    用XXXXX作為密鑰,使用HMAC-SHA1方法對(duì)待簽名字符串GID_Test@@@0001做簽名計(jì)算得到一個(gè)二進(jìn)制數(shù)組,再對(duì)該二進(jìn)制數(shù)組做Base64編碼得到最終的Password簽名字符串。

    說明
    • Username和Password的計(jì)算方法已經(jīng)被封裝到云消息隊(duì)列 MQTT 版的終端SDK中,您無需單獨(dú)計(jì)算。SDK下載地址,請(qǐng)參見SDK下載
    • HMAC-SHA1的算法實(shí)現(xiàn),Java SDK可以參見Demo工程中的ConnectionOptionWrapperTools類的示例代碼。其他語言都有現(xiàn)成的函數(shù)庫,請(qǐng)自行搜索。

使用控制臺(tái)驗(yàn)證簽名

云消息隊(duì)列 MQTT 版控制臺(tái)提供了簽名計(jì)算工具,以方便您比對(duì)驗(yàn)證自己的簽名計(jì)算是否正確。

  1. 登錄云消息隊(duì)列 MQTT 版控制臺(tái)
  2. 在左側(cè)導(dǎo)航欄單擊實(shí)例列表
  3. 在頂部菜單欄選擇地域。
  4. 在實(shí)例列表中找到目標(biāo)實(shí)例,單擊實(shí)例名稱或在其操作列單擊詳情
  5. 在左側(cè)導(dǎo)航欄單擊簽名校驗(yàn)
  6. 簽名校驗(yàn)頁面,輸入程序使用的賬號(hào)的AccessKey ID、AccessKey Secret以及Client ID,單擊計(jì)算簽名即可得到程序中需要設(shè)置的Username和Password參數(shù)。簽名校驗(yàn)
說明

此工具僅僅使用瀏覽器前端JavaScript完成計(jì)算,并不會(huì)傳輸AccessKey Secret到云消息隊(duì)列 RocketMQ 版后端,因此不用擔(dān)心AccessKey Secret泄漏的風(fēng)險(xiǎn)。實(shí)際業(yè)務(wù)中控制臺(tái)僅僅是用來排查問題比對(duì)數(shù)據(jù)。

簽名計(jì)算可以放在客戶端或者更安全的服務(wù)端計(jì)算完成后下發(fā)給MQTT客戶端。