一型一密認證方式下,同一產品下所有設備可以燒錄相同的設備標志信息,即所有設備包含相同的產品證書(ProductKey和ProductSecret)。設備發送激活請求時,物聯網平臺會進行身份確認,認證通過后,下發設備接入所需信息。
背景信息
一型一密認證支持兩種使用方式:一型一密免預注冊、一型一密預注冊。
一型一密免預注冊:無需提前在物聯網平臺創建設備,該方式為動態創建設備,并返回認證信息給設備。
一型一密預注冊:需要提前在物聯網平臺創建設備,該方式為動態獲取DeviceSecret。
前提條件
使用流程
如下功能時序圖,以設備的應用程序demos/device_dynamic_register_demo.c
為例,介紹一型一密的使用流程。
一型一密預注冊方式流程圖
一型一密免預注冊流程圖
步驟1: 設備初始化
添加頭文件。
#include "aiot_device_api.h"
創建設備句柄。
void *device_client = aiot_device_create(product_key, device_name); if (device_client == NULL) { printf("device_client failed\n"); return -1; }
步驟2: 設置連接參數
config = aiot_linkconfig_init(protocol);
if(config == NULL){
aiot_device_delete(&device_client);
printf("aiot_linkconfig_init failed\n");
return -1;
}
aiot_linkconfig_host(config, host, port);
/* 動態注冊功能需要使用product_secret, 如果是企業實例設備還需要INSTANCE_ID */
aiot_linkconfig_dynamic_register(config, product_secret, INSTANCE_ID);
步驟3: 發起動態注冊請求
一型一密預注冊方式
/* 動態注冊獲取密鑰成功,可以使用該密鑰進行連接 */ char device_secret_result[128]; res = aiot_device_dynamic_secret(device_client, config, device_secret_result, 128); if(res != STATE_SUCCESS) { ... } /* TODO: 示例只做打印處理,用戶應保存設備密鑰 */ printf("dynamic register success, device_secret %s\r\n", device_secret_result);
一型一密免預注冊方式
aiot_dynamic_register_info_t info; res = aiot_device_dynamic_register(device_client, config, &info); if(res != STATE_SUCCESS) { aiot_device_delete(&device_client); aiot_linkconfig_deinit(&config); printf("aiot_device_dynamic_register failed\n"); return -1; } /* TODO: 此處只做打印處理,用戶應該完成建連信息的保存 */ printf("dynamic register success, username %s, password %s, clientid %s\r\n", info.username, info.password, info.client_id);
步驟4: 保存設備密鑰并建連信息
整個流程示例中僅對動態注冊獲取的結果進行了打印處理,用戶使用時應該保存至文件系統中。
步驟5: 退出程序
/* 資源回收 */
aiot_linkconfig_deinit(&config);
aiot_device_delete(&device_client);
文檔內容是否對您有幫助?