全部產品
Search
文件中心

ApsaraMQ for MQTT:一機一密鑒權模式

更新時間:Mar 13, 2025

一機一密認證方法,即預先為每個裝置申請唯一的訪問憑證(ClientId、DeviceAccessKeyId和DeviceAccessKeySecret)。當裝置與雲Message QueueTT 版建立串連時,需要將裝置訪問憑證中的資訊按照約定的形式設定到Username和Password中,向雲Message QueueTT 版發起認證請求,雲Message QueueTT 版認證通過後啟用裝置,裝置與雲Message QueueTT 版間才可傳輸資料。

名詞解釋

術語

說明

裝置訪問憑證

MQTT伺服器為使用者用戶端頒發的訪問憑證,包含DeviceAccessKeyId和DeviceAccessKeySecret,與Client ID綁定並全域唯一。用戶端與雲Message QueueTT 版建立串連時,需要按照約定形式將裝置訪問憑證中的DeviceAccessKeyId和DeviceAccessKeySecret設定到Username和Password中進行認證。

應用伺服器

您管理本地帳號的伺服器,用來替用戶端申請和管理裝置訪問憑證服務的應用。

MQTT伺服器

雲Message QueueTT 版許可權認證和訊息收發伺服器,用來處理應用伺服器發起的裝置訪問憑證相關的請求以及訊息收發業務。

計算方式

按照鑒權概述的描述,如果選擇一機一密鑒權模式,MQTT用戶端實際串連MQTTMessage Service器時,connect報文中的Username和Password需要按照本文約定的規範設定,具體設定和計算方法如下:

  • Username

    由鑒權模式名稱、DeviceAccessKeyId和InstanceId三部分組成,以豎線(|)分隔。一機一密模式下鑒權模式設定為DeviceCredential

    舉例:一個用戶端的Client ID是GID_Test@@@0001,使用的執行個體ID是mqtt-xxxxx,使用的DeviceAccessKeyId是YYYYY,則簽名模式的Username應該設定成 DeviceCredential|YYYYY|mqtt-xxxxx

    Client ID的詳細說明請參見名詞解釋

  • Password

    對Client ID簽名的結果。具體計算方法如下:

    舉例:一個用戶端的Client ID是GID_Test@@@0001,使用的DeviceAccessKeySecret是XXXXX。

    用XXXXX作為密鑰,使用HMAC-SHA1方法對待簽名字串GID_Test@@@0001做簽名計算得到一個位元組,再對該位元組做Base64編碼得到最終的Password字串。

    HMAC-SHA1的演算法實現,各個語言都有現成的函數庫,請自行搜尋。

使用流程

使用一機一密鑒權模式,您需要按照下圖所示的流程,部署您的應用伺服器。而且在初始化時,MQTT用戶端需要具備與您的應用伺服器互動(擷取和更新裝置訪問憑證)的能力。

圖 1. 鑒權流程一機一密流程圖

具體流程如下:

  1. 使用者應用伺服器調用OpenAPI介面向MQTT伺服器發起請求,預先為使用者用戶端申請裝置訪問憑證。

  2. MQTT伺服器驗證申請裝置訪問憑證的請求,判斷合法之後下發對應的裝置訪問憑證。

  3. 應用伺服器將返回的裝置訪問憑證持久化到本地,對每個用戶端對應的訪問憑證進行映射。緩衝裝置訪問憑證有以下優勢:

    • 只要用戶端側沒有發生憑證泄露等問題,裝置訪問憑證就無需更換,此時可以直接返回緩衝的裝置憑證,避免申請憑證時介面調用的開銷。

    • 用戶端重新申請裝置訪問憑證時,如果MQTT伺服器異常,應用伺服器可以嘗試返回用戶端之前申請的裝置訪問憑證以實現本地容災。

  4. 使用者應用伺服器將申請好的裝置訪問憑證下發給對應的MQTT用戶端。

  5. MQTT用戶端按照規範將裝置訪問憑證中的資訊作為參數設定,串連MQTT伺服器,服務端驗證通過後用戶端即可正常收發訊息。

使用限制

執行個體規格約束

  • 裝置訪問憑證的配額與執行個體規格中的串連數對等,達到配額上限後將無法為新裝置申請訪問憑證,您可以通過為執行個體升配提高訪問憑證的配額,具體操作,請參見執行個體續約和升降配

  • 使用一機一密認證方式時,對於不再使用的裝置憑證,請您及時調用UnRegisterDeviceCredential介面登出裝置訪問憑證,以免佔用訪問憑證的配額。

用戶端行為約束

  • 必須按照約定形式將裝置訪問憑證中的資訊作為串連參數設定到Username和Password中,每次串連時上傳。

  • 用戶端應該對應用伺服器返回的裝置訪問憑證做持久化,避免每次重連都申請一樣的裝置訪問憑證,防止大批量用戶端同時串連壓垮應用伺服器。

應用伺服器行為約束

  • 應用伺服器應該對裝置訪問憑證和用戶端的映射關係進行管理,避免同一個用戶端重複調用。

  • 應用伺服器需要做本地容災,避免因MQTT伺服器訪問短暫不可用而導致業務阻塞的情況。

相關API

一機一密鑒權流程通過相關的API來完成。應用伺服器負責裝置訪問憑證的申請和管理,和雲Message QueueTT 版伺服器之間通過HTTPS的OpenAPI進行互動。

每個介面都要求通過AccessKey和請求籤名做來做身分識別驗證。目前開放註冊、查詢、登出和更新裝置訪問憑證的介面。詳細介面資訊,請參見一機一密應用伺服器介面