Todos los productos
Search
Centro de documentos

IoT Platform:Autenticación de dispositivos

Última actualización: Sep 03, 2026

Existen dos métodos de autenticación de dispositivos:

  • Certificado único por dispositivo: se graba un certificado exclusivo (ProductKey, DeviceName y DeviceSecret) en cada dispositivo.

  • Certificado único por producto: se graba el mismo certificado (ProductKey, Product Secret) en todos los dispositivos de un producto. Este método requiere menos modificaciones en la línea de producción. Cada dispositivo debe contar con su propio identificador único y cargarse previamente en Alibaba Cloud IoT Platform; la plataforma determina si acepta la conexión del dispositivo según dicho identificador.

Invoque IOT_Ioctl() para configurar el método de autenticación:

/* Choose Login Method */
int dynamic_register = 1; /* 0: Do not use unique-certificate-per-product, 1: use unique-certificate-per-product */
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);

Implementar la autenticación de certificado único por dispositivo

Debe invocar IOT_Ioctl para establecer el modo de autenticación:

// for demo only
    /* Set the authentication mode */

    int dynamic_register = 0;
    IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);

Implementar la autenticación de certificado único por producto

El esquema de certificado único por producto implica que el contenido grabado en los dispositivos de un producto (ProductKey, ProductSecret) es idéntico. Se utiliza un proceso denominado registro dinámico para obtener el DeviceSecret desde IoT Platform mediante el identificador único del dispositivo. Dicho identificador puede ser el número de serie o la dirección MAC, y se interpreta como el DeviceName.

Una vez que el SDK obtiene el DeviceSecret del dispositivo desde IoT Platform, invoca HAL_SetDeviceSecret() para almacenarlo. El dispositivo debe conservar este valor en la memoria Flash. No borre el DeviceSecret después de obtenerlo mediante el registro dinámico, ya que IoT Platform rechazará proporcionarlo si el dispositivo ya lo ha obtenido previamente.

Para utilizar el certificado único por producto, invoque las siguientes interfaces para habilitar la función de registro dinámico.

/* Turn on the dynamic registration function */
int dynamic_register = 1; /* 1: Use unique-certificate-per-product */
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);

Ejemplo de autenticación de certificado único por producto para productos Basic Edition

Acceda a Alibaba Cloud IoT Platform, seleccione el producto y habilite “Dynamic-Registration”:

product

A continuación, cree un nuevo dispositivo bajo este producto:

product

Abra Link Kit SDK y reemplace el código de la siguiente manera:

#include "iot_import.h"
#include "iot_export.h"
#include "app_entry.h"

// To replace the values of PRODUCT_KEY, PRODUCT_SECRET, DEVICE_NAME
#define PRODUCT_KEY             "a1MZxOdcBnO"
#define PRODUCT_SECRET          "h4I4dneEFp7EImTv"
#define DEVICE_NAME             "Example_dyn1"

//And comment the DEVICE_SECRET
//#define DEVICE_SECRET           "t9GmMf2jb3LgWfXBaZD2r3aJrfVWBv56"

...
...
int main(int argc, char **argv)
{
    IOT_OpenLog("mqtt");
    IOT_SetLogLevel(IOT_LOG_DEBUG);

    user_argc = argc;
    user_argv = argv;
    HAL_SetProductKey(PRODUCT_KEY);
    HAL_SetProductSecret(PRODUCT_SECRET);
    HAL_SetDeviceName(DEVICE_NAME);
// Comment the setting to DeviceSecret, because we will get it from the IoT platform dynamically
    /* HAL_SetDeviceSecret(DEVICE_SECRET); */

    /* Choose Login Server */
    int domain_type = IOTX_CLOUD_DOMAIN_SH;
    IOT_Ioctl(IOTX_IOCTL_SET_DOMAIN, (void *)&domain_type);

    /* Enable Dynamic registration */
    int dynamic_register = 1;
    IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);

    mqtt_client();
    IOT_DumpMemoryStats(IOT_LOG_DEBUG);
    IOT_CloseLog();

    EXAMPLE_TRACE("out of sample!") ;

    return 0;
}

Después de compilar el código, ejecute el programa de ejemplo. La salida será similar a a continuación:

$./output/release/bin/mqtt-example
[inf] IOT_SetupConnInfo(114): DeviceSecret KV does not exist, Now We Need Dynamic Register...
[inf] _calc_dynreg_sign(61): Random Key: 7y4Jg5xdKCy9W2i
[inf] _calc_dynreg_sign(75): Sign: d3b560d5be0c9c19749470e85d912b65685fa4b20edcbd179ccfe98fcca23d5e
[inf] httpclient_common(794): host: 'iot-auth.cn-shanghai.aliyuncs.com', port: 443
...
...
...
[inf] _fetch_dynreg_http_resp(110): Http Response Payload: {"code":200,"data":{"deviceName":"Example_dyn1","deviceSecret":"KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4","productKey":"a1ExpAkj9Hi"},"message":"success"}
[inf] _fetch_dynreg_http_resp(127): Dynamic Register Code: 200
[inf] _fetch_dynreg_http_resp(148): Dynamic Register Device Secret: KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4
[inf] iotx_device_info_init(39): device_info created successfully!

...

[dbg] iotx_device_info_set(49): start to set device info!
[dbg] iotx_device_info_set(63): device_info set successfully!
[inf] guider_print_dev_guider_info(279): ....................................................
[inf] guider_print_dev_guider_info(280):           ProductKey : a1ExpAkj9Hi
[inf] guider_print_dev_guider_info(281):           DeviceName : Example_dyn1
[inf] guider_print_dev_guider_info(282):             DeviceID : a1ExpAkj9Hi.Example_dyn1
[inf] guider_print_dev_guider_info(284): ....................................................
[inf] guider_print_dev_guider_info(285):        PartnerID Buf : ,partner_id=example.demo.partner-id
[inf] guider_print_dev_guider_info(286):         ModuleID Buf : ,module_id=example.demo.module-id
[inf] guider_print_dev_guider_info(287):           Guider URL :
[inf] guider_print_dev_guider_info(289):       Guider SecMode : 2 (TLS + Direct)
[inf] guider_print_dev_guider_info(291):     Guider Timestamp : 2524608000000
[inf] guider_print_dev_guider_info(292): ....................................................
[inf] guider_print_dev_guider_info(298): ....................................................
[inf] guider_print_conn_info(256): -----------------------------------------
...
...
[inf] iotx_mc_connect(2502): mqtt connect success!

La salida de ejecución anterior indica que el dispositivo ha adquirido el DeviceSecret mediante el registro dinámico.

(Device Secret): "KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4"

El SDK invoca automáticamente HAL_Kv_Set para hacerlo persistente y lo recuperará de la memoria Flash la próxima vez que el dispositivo se conecte a IoT Platform. Si intenta utilizar la función de certificado único por producto en el mismo dispositivo por segunda vez, la nube devolverá el siguiente error:

[inf] _fetch_dynreg_http_resp(110): Http Response Payload: {"code":6289,"message":"device is already active"}

Compatibilidad con Alibaba Cloud Link Platform for Smart Living

Cuando se activa la conexión de red para dispositivos internacionales en Alibaba Cloud Link Platform for Smart Living, estos se conectan uniformemente al centro de activación en Singapur. La plataforma asigna automáticamente los dispositivos a los nodos de datos más cercanos. Por ejemplo, los dispositivos activados en Estados Unidos se conectarán automáticamente a los servidores ubicados en ese país.

El SDK admite el modo de Alibaba Cloud Link Platform for Smart Living mediante las dos configuraciones siguientes:

  1. Cambie el valor de FEATURE_MQTT_DIRECT en make.setting a n para habilitar el modo de autenticación HTTPS.

  2. Configure el sitio de Singapur como sitio de conexión:

/* Choose Login Server */
    int domain_type = IOTX_CLOUD_REGION_SINGAPORE;
    IOT_Ioctl(IOTX_IOCTL_SET_REGION, (void *)&domain_type);