一型一密

一型一密认证方式下,同一产品下所有设备可以烧录相同的设备标志信息,即所有设备包含相同的产品证书(ProductKey和ProductSecret)。设备发送激活请求时,物联网平台会进行身份确认,认证通过后,下发设备接入所需信息。

背景信息

一型一密认证支持两种使用方式:一型一密免预注册、一型一密预注册。

  • 一型一密免预注册:无需提前在物联网平台创建设备,该方式为动态创建设备,并返回认证信息给设备。

  • 一型一密预注册:需要提前在物联网平台创建设备,该方式为动态获取DeviceSecret。

前提条件

使用流程

如下功能时序图,以设备的应用程序demos/device_dynamic_register_demo.c为例,介绍一型一密的使用流程。

  • 一型一密预注册方式流程图

    image
  • 一型一密免预注册流程图

    image

步骤1: 设备初始化

  1. 添加头文件。

    #include "aiot_device_api.h"
  2. 创建设备句柄。

    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);