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