Todos os produtos
Search
Central de documentação

IoT Platform:Autenticação de dispositivos

Última atualização: Jun 26, 2026

Há duas formas de autenticação de dispositivos:

  • Certificado único por dispositivo: gravação de um certificado exclusivo (ProductKey, DeviceName e DeviceSecret) em cada dispositivo.

  • Certificado único por produto: gravação do mesmo certificado (ProductKey e ProductSecret) em todos os dispositivos de um produto. Esse método exige menos modificações na linha de produção. Cada dispositivo deve ter um identificador exclusivo e enviá-lo previamente à Alibaba Cloud IoT Platform. A plataforma decide se aceita a conexão com base nesse identificador.

Chame IOT_Ioctl() para configurar o método de autenticação:

/* 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 autenticação com certificado único por dispositivo

Chame IOT_Ioctl para definir o modo de autenticação:

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

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

Implementar autenticação com certificado único por produto

No modelo de certificado único por produto, o conteúdo gravado nos dispositivos de um produto (ProductKey e ProductSecret) é idêntico. O sistema usa um processo chamado registro dinâmico para obter o DeviceSecret da IoT Platform com base no identificador exclusivo do dispositivo. Esse identificador pode ser o número de série (SN) ou o endereço MAC e será tratado como DeviceName.

Depois que o SDK obtém o DeviceSecret de um dispositivo na IoT Platform, ele chama HAL_SetDeviceSecret() para salvar o valor. O dispositivo deve manter esse dado na memória Flash. Não apague o DeviceSecret após o dispositivo obtê-lo pelo processo de registro dinâmico, pois a IoT Platform recusará fornecer o DeviceSecret novamente se o dispositivo já o tiver recebido.

Para usar o certificado único por produto, chame as interfaces abaixo para ativar a função 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);

Exemplo de autenticação com certificado único por produto para produtos da Basic Edition

Acesse a Alibaba Cloud IoT Platform, selecione o produto e ative "Dynamic-Registration":

product

Em seguida, crie um novo dispositivo neste produto:

product

Abra o Link Kit SDK e substitua o código conforme o exemplo:

#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;
}

Após compilar o código e executar o programa de exemplo, a saída será semelhante a esta:

$./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!

A saída anterior indica que o dispositivo obteve o DeviceSecret por meio do registro dinâmico.

(Device Secret): "KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4"

O SDK chama automaticamente HAL_Kv_Set para persistir o dado. Assim, o SDK o recupera da memória Flash na próxima conexão do dispositivo à IoT Platform. Se o usuário tentar usar a função de certificado único por produto no mesmo dispositivo uma segunda vez, a nuvem retornará o seguinte erro:

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

Suporte à Alibaba Cloud Link Platform for Smart Living

Quando a conexão de rede é ativada para dispositivos no exterior na Alibaba Cloud Link Platform for Smart Living, eles se conectam uniformemente ao centro de ativação em Singapura. A plataforma atribui automaticamente os dispositivos aos nós de dados mais próximos. Por exemplo, dispositivos ativados nos Estados Unidos conectam-se automaticamente aos servidores naquele país.

O SDK oferece suporte ao modo da Alibaba Cloud Link Platform for Smart Living mediante as duas configurações a seguir:

  1. Altere FEATURE_MQTT_DIRECT em make.setting para n para ativar o modo de autenticação HTTPS.

  2. Configure o site de Singapura como local de conexão:

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