如果您需使用云消息隊列 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客戶端。