物聯網平台支援CoAP協議串連通訊。CoAP協議適用在資源受限的低功耗裝置上,尤其是NB-IoT的裝置使用。本文介紹基於CoAP協議進行裝置接入的流程,及使用DTLS和對稱式加密兩種認證方式下的自主接入流程。
基礎流程
序號 | 描述 |
① | 在裝置端NB-IoT模組中,整合阿里雲物聯網平台SDK。廠商在物聯網平台控制台申請裝置認證(ProductKey、DeviceName和DeviceSecret)並燒錄到裝置中。 |
② | NB-IoT裝置通過電訊廠商的蜂窩網路進行入網。需要聯絡當地電訊廠商,確保裝置所屬地區已經覆蓋NB網路,並已具備NB-IoT入網能力。 |
③ | 裝置入網成功後,NB裝置產生的流量資料及產生的費用資料,將由電訊廠商的M2M平台管理。此部分平台能力由電訊廠商提供。 |
④ | 裝置開發人員可通過CoAP/UDP協議,將裝置採集的即時資料上報到阿里雲物聯網平台,藉助物聯網平台,實現海量億級裝置的安全連線和資料管理能力。並且,可通過規則引擎,將資料轉寄至阿里雲的巨量資料產品、雲資料庫、Table Store等服務中進行處理。 |
⑤ | 物聯網平台提供相關的資料開放介面和訊息推送服務,可將資料轉寄到商務服務器中,實現裝置資產與實際應用的快速整合。 |
使用對稱式加密自主接入
- 串連CoAP伺服器。Endpoint地址:公用執行個體和企業版執行個體中,CoAP的接入網域名稱,請參見查看和配置執行個體終端節點資訊(Endpoint)。
- 裝置認證。
裝置認證請求:
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方法。 URL URL地址,取值: /auth
。Host Endpoint地址。 Port 連接埠,取值: 5682
。Accept 裝置接收的資料編碼方式。目前,支援兩種方式:application/json和application/cbor。 Content-Format 裝置發送給物聯網平台的上行資料的編碼格式,目前,支援兩種方式:application/json和application/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:是將所有提交給伺服器的參數(除version、sign、resources和signmethod外),按照英文字母升序,依次拼接排序(無拼接符號)。 說明 用於簽名計算的參數值需與裝置認證請求中提交的參數值一致。
簽名計算樣本:
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值。 - 上報資料。
上報資料請求:
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。Host 是 Endpoint地址。 Port 是 連接埠,取值: 5682
。Accept 是 裝置接收的資料編碼方式。目前,支援兩種方式:application/json和application/cbor。 Content-Format 是 上行資料的編碼格式,服務端對此不做校正。目前,支援兩種方式:application/json和application/cbor。 payload 是 待上傳的資料經進階加密標準(AES)加密後的資料。 說明 AES加密時,Transform為AES/CBC/PKCS5Padding
, 初始向量IV為543yhjy97ae7fyfg
,Key由sha256演算法產生。Key產生樣本:
假設deviceSecret=zPwChiLh0EaifR809D5Rc6LDIC6A****
,裝置認證返回random=8fe3c8d50e10****
。- 將deviceSecret和random按照
${deviceSecret},${random}
格式組成以下字串。zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10****
- 使用sha256對以上字串的UTF-8編碼結果進行加密,並轉換為16進位字串。
59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268****
- 從上一步得到的字串的第17位開始,截取長度為32位的字串(subString(16,48)),得到密鑰。
10c405821119959e5297516d185b71e3
CustomOptions 是 option值有 2088
和2089
兩種類型:2088
:表示token,取值為裝置認證後返回的token值。說明 每次上報資料都需要攜帶token資訊。如果token失效,需要重新進行裝置認證,擷取token。2089
:表示seq,取值需比裝置認證後返回的seqOffset值更大,且在認證生效周期內不重複的隨機值。建議設定為根據每次請求資料包中的seq遞增值,使用上一欄所介紹的方法進行AES加密填充。
option返回樣本:
number:2090
2090
:表示物聯網平台的雲端訊息ID。token和seq除了寫在options中,還可以寫在URL中,例如
/topic/${topic}?token=xxxx&seq=xxxxx
。如果同時存在於options和URL中,以options為準。訊息上行成功後,返回成功狀態代碼,同時返回物聯網平台產生的訊息ID。
- 將deviceSecret和random按照
使用DTLS自主接入
- 串連CoAP伺服器。 Endpoint地址:公用執行個體和企業版執行個體中,CoAP的接入網域名稱,請參見查看和配置執行個體終端節點資訊(Endpoint)。
- 下載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 是 時間戳記。 - 裝置認證。使用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.05 Content 認證通過:Token對象 正確請求。 4.00 Bad Request no payload 請求發送的Payload非法。 4.01 Unauthorized no payload 未授權的請求。 4.03 Forbidden no payload 禁止的請求。 4.04 Not Found no payload 請求的路徑不存在。 4.05 Method Not Allowed no payload 要求方法不是指定值。 4.06 Not Acceptable no payload Accept不是指定的類型。 4.15 Unsupported Content-Format no payload 請求的content不是指定類型。 5.00 Internal Server Error no payload auth伺服器逾時或錯誤。 - 上行資料。 裝置通過指定自訂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。Host 是 Endpoint地址。 Port 是 連接埠,取值: 5684
。Accept 是 裝置接收的資料編碼方式。目前,支援兩種方式:application/json和application/cbor。 Content-Format 是 上行資料的編碼格式,服務端對此不做校正。目前,支援兩種方式:application/json和application/cbor。 CustomOptions 是 - number取值:
2088
。 - token為裝置認證(auth)返回的token值。
說明 每次上報資料都需要攜帶token資訊。如果token失效,需要重新進行裝置認證,擷取token。 - number取值:
樣本
裝置通過CoAP協議接入物聯網平台的樣本,請參見CoAP用戶端對稱式加密接入樣本。