全部產品
Search
文件中心

IoT Platform:CoAP串連通訊

更新時間:Jun 30, 2024

物聯網平台支援CoAP協議串連通訊。CoAP協議適用在資源受限的低功耗裝置上,尤其是NB-IoT的裝置使用。本文介紹基於CoAP協議進行裝置接入的流程,及使用DTLS和對稱式加密兩種認證方式下的自主接入流程。

基礎流程

基於CoAP協議將NB-IoT裝置接入物聯網平台的流程如下圖所示。coap
序號描述
在裝置端NB-IoT模組中,整合阿里雲物聯網平台SDK。廠商在物聯網平台控制台申請裝置認證(ProductKey、DeviceName和DeviceSecret)並燒錄到裝置中。
NB-IoT裝置通過電訊廠商的蜂窩網路進行入網。需要聯絡當地電訊廠商,確保裝置所屬地區已經覆蓋NB網路,並已具備NB-IoT入網能力。
裝置入網成功後,NB裝置產生的流量資料及產生的費用資料,將由電訊廠商的M2M平台管理。此部分平台能力由電訊廠商提供。
裝置開發人員可通過CoAP/UDP協議,將裝置採集的即時資料上報到阿里雲物聯網平台,藉助物聯網平台,實現海量億級裝置的安全連線和資料管理能力。並且,可通過規則引擎,將資料轉寄至阿里雲的巨量資料產品、雲資料庫、Table Store等服務中進行處理。
物聯網平台提供相關的資料開放介面和訊息推送服務,可將資料轉寄到商務服務器中,實現裝置資產與實際應用的快速整合。

使用對稱式加密自主接入

  1. 串連CoAP伺服器。
    Endpoint地址:公用執行個體和企業版執行個體中,CoAP的接入網域名稱,請參見查看和配置執行個體終端節點資訊(Endpoint)
  2. 裝置認證。

    裝置認證請求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"a1NUjcV****","deviceName":"ff1a11e7c08d4b3db2b1500d8e0e55","clientId":"a1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55","sign":"F9FD53EE0CD010FCA40D14A9FE******", "seq":"10"}
    表 1. 裝置認證參數說明
    參數說明
    Method要求方法,只支援POST方法。
    URLURL地址,取值:/auth
    HostEndpoint地址。
    Port連接埠,取值:5682
    Accept裝置接收的資料編碼方式。目前,支援兩種方式:application/jsonapplication/cbor
    Content-Format裝置發送給物聯網平台的上行資料的編碼格式,目前,支援兩種方式:application/jsonapplication/cbor
    payload裝置認證資訊內容,JSON資料格式。具體參數,請參見下表Payload說明。
    表 2. Payload 說明
    欄位名稱是否必需說明
    productKey裝置認證資訊中ProductKey的值,是物聯網平台為產品頒發的全域唯一標識。可從物聯網平台控制台的裝置詳情頁擷取。
    deviceName裝置認證資訊中DeviceName的值,在註冊裝置時自訂或自動產生的裝置名稱。可從物聯網平台控制台的裝置詳情頁擷取。
    ackMode通訊模式。取值:
    • 0:request/response是攜帶模式,即用戶端發送請求到服務端後,服務端處理完業務,回複業務資料和ACK。
    • 1:request/response是分離模式,即用戶端發送請求到服務端後,服務端先回複一個確認ACK,然後再處理業務,回複業務資料。

    若不傳入此參數,則預設為攜帶模式。

    sign簽名。

    您需將根據簽名計算方法signmethod(DeviceSecret,content)計算出的值,作為sign的值。支援hmacmd5和hmacsha1方法。

    簽名計算所需參數:

    • signmethod:簽名方法,需與您的傳入signmethod取值一致。
    • DeviceSecret:裝置的DeviceSecret。可在物聯網平台控制台的裝置詳情頁查看。
    • content:是將所有提交給伺服器的參數(除versionsignresourcessignmethod外),按照英文字母升序,依次拼接排序(無拼接符號)。
      說明 用於簽名計算的參數值需與裝置認證請求中提交的參數值一致。

    簽名計算樣本:

    hmac_md5(mRPVdzSMu2nVBxzK77ERPIMxSYIv****, clientIda1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55deviceNameff1a11e7c08d4b3db2b1500d8e0e55productKeya1NUjcV****seq10timestamp1524448722000)
    signmethod演算法類型,支援hmacmd5和hmacsha1。預設是hmacmd5。
    clientId用戶端ID,長度需在64字元內。建議使用裝置的MAC地址或SN碼作為clientId的值。
    timestamp時間戳記。目前,時間戳記不做時間視窗校正。
    seq認證訊息中攜帶的序號,是裝置端產生的隨機數。

    返回結果樣本:

    {"random":"ad2b3a5eb51d6****","seqOffset":1,"token":"MZ8m37hp01w1SSqoDFzo001050****.ad2b"}
    表 3. 返回參數說明
    欄位名稱說明
    random用於後續上、下行加密,組成加密Key。
    seqOffset認證seq位移初始值。
    token裝置認證成功後,返回的Token值。
  3. 上報資料。

    上報資料請求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088, 2089
    表 4. 上報資料參數說明
    欄位名稱是否必需說明
    Method要求方法,只支援POST方法。
    URL傳入格式:/topic/${topic}。其中,變數${topic}需替換為裝置資料上行Topic。
    HostEndpoint地址。
    Port連接埠,取值:5682
    Accept裝置接收的資料編碼方式。目前,支援兩種方式:application/jsonapplication/cbor
    Content-Format上行資料的編碼格式,服務端對此不做校正。目前,支援兩種方式:application/jsonapplication/cbor
    payload待上傳的資料經進階加密標準(AES)加密後的資料。
    說明 AES加密時,Transform為AES/CBC/PKCS5Padding, 初始向量IV為543yhjy97ae7fyfg,Key由sha256演算法產生。

    Key產生樣本:

    假設deviceSecret=zPwChiLh0EaifR809D5Rc6LDIC6A****,裝置認證返回random=8fe3c8d50e10****
    1. deviceSecretrandom按照${deviceSecret},${random}格式組成以下字串。
      zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10****
    2. 使用sha256對以上字串的UTF-8編碼結果進行加密,並轉換為16進位字串。
      59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268****
    3. 從上一步得到的字串的第17位開始,截取長度為32位的字串(subString(16,48)),得到密鑰。
      10c405821119959e5297516d185b71e3
    CustomOptionsoption值有20882089兩種類型:
    • 2088:表示token,取值為裝置認證後返回的token值。
      說明 每次上報資料都需要攜帶token資訊。如果token失效,需要重新進行裝置認證,擷取token
    • 2089:表示seq,取值需比裝置認證後返回的seqOffset值更大,且在認證生效周期內不重複的隨機值。建議設定為根據每次請求資料包中的seq遞增值,使用上一欄所介紹的方法進行AES加密填充。

    option返回樣本:

    number:2090

    2090:表示物聯網平台的雲端訊息ID。

    tokenseq除了寫在options中,還可以寫在URL中,例如/topic/${topic}?token=xxxx&seq=xxxxx。如果同時存在於options和URL中,以options為準。

    訊息上行成功後,返回成功狀態代碼,同時返回物聯網平台產生的訊息ID。

使用DTLS自主接入

  1. 串連CoAP伺服器。
    Endpoint地址:公用執行個體和企業版執行個體中,CoAP的接入網域名稱,請參見查看和配置執行個體終端節點資訊(Endpoint)
  2. 下載DTLS安全通道根憑證,使用DTLS庫串連物聯網平台,PSK對應的加密方式如下:
    psk_id: "${authType}" + "|" + "${signMethod}" + "|" + "${productKey}" + "&" + "${deviceName}" + "timestamp"
    psk: signMethod(DeviceSecret, "${productKey}" + "&" + "${deviceName}" + "${timestamp}")
    表 5. 欄位說明
    欄位是否必需說明
    authType認證類型,這裡設為固定值:devicename。
    signMethod演算法類型,支援hmacmd5、hmacsha1、hmacsha256。
    productKey裝置所屬產品的ProductKey。
    deviceName裝置名稱,DeviceName。
    DeviceSecret裝置的DeviceSecret
    timestamp時間戳記。
  3. 裝置認證。使用auth介面認證裝置,擷取Token。上報資料時,需攜帶Token資訊。

    裝置認證請求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"ZG1EvTE****","deviceName":"NlwaSPXsCpTQuh8FxBGH","clientId":"mylight1000002","sign":"bccb3d2618afe74b3eab12b94042****"}

    Port參數外,其他參數及Payload內容說明,可參見使用對稱式加密自主接入

    返回結果樣本:

    response:{"token":"f13102810756432e85dfd351eeb4****"}
    表 6. 返回碼說明
    Code描述Payload備忘
    2.05Content認證通過:Token對象正確請求。
    4.00Bad Requestno payload請求發送的Payload非法。
    4.01Unauthorizedno payload未授權的請求。
    4.03Forbiddenno payload禁止的請求。
    4.04Not Foundno payload請求的路徑不存在。
    4.05Method Not Allowedno payload要求方法不是指定值。
    4.06Not Acceptableno payloadAccept不是指定的類型。
    4.15Unsupported Content-Formatno payload請求的content不是指定類型。
    5.00Internal Server Errorno payloadauth伺服器逾時或錯誤。
  4. 上行資料。
    裝置通過指定自訂Topic將資料發送到物聯網平台。

    可在物聯網平台控制台,裝置所屬產品的產品詳情頁面的Topic類列表中,建立自訂Topic。僅支援發布許可權的Topic用於資料上報。

    例如:Topic為/${YourProductKey}/${YourDeviceName}/pub,假設當前裝置名稱為device,所屬產品的ProductKey為a1GFjLP****,那麼您可使用 a1GFjLP****.coap.cn-shanghai.link.aliyuncs.com:5684/topic/a1GFjLP****/device/pub 地址來上報資料。

    上報資料請求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088
    表 7. 上報資料請求參數說明
    參數是否必需說明
    Method要求方法。支援POST方法。
    URL/topic/${topic}。其中,變數${topic}需替換為當前裝置對應的Topic。
    HostEndpoint地址。
    Port連接埠,取值:5684
    Accept裝置接收的資料編碼方式。目前,支援兩種方式:application/jsonapplication/cbor
    Content-Format上行資料的編碼格式,服務端對此不做校正。目前,支援兩種方式:application/jsonapplication/cbor
    CustomOptions
    • number取值:2088
    • token為裝置認證(auth)返回的token值。
    說明 每次上報資料都需要攜帶token資訊。如果token失效,需要重新進行裝置認證,擷取token

樣本

裝置通過CoAP協議接入物聯網平台的樣本,請參見CoAP用戶端對稱式加密接入樣本