Tous les produits
Search
Centre de documentation

IoT Platform:Authentification des appareils

Dernière mise à jour :Aug 09, 2026

Il existe deux méthodes d'authentification des appareils :

  • Certificat unique par appareil : gravure d'un certificat unique (ProductKey, DeviceName et DeviceSecret) dans chaque appareil.

  • Certificat unique par produit : gravure du même certificat (ProductKey, ProductSecret) dans tous les appareils d'un produit. Cette méthode nécessite moins de modifications sur la chaîne de production. Chaque appareil doit posséder son propre identifiant unique, préalablement envoyé à Alibaba Cloud IoT Platform. La plateforme décide alors d'accepter ou non la connexion en fonction de cet identifiant.

Appelez IOT_Ioctl() pour configurer la méthode d'authentification :

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

Implémenter l'authentification par certificat unique par appareil

Appelez IOT_Ioctl pour définir le mode d'authentification :

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

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

Implémenter l'authentification par certificat unique par produit

L'authentification par certificat unique par produit signifie simplement que le contenu (ProductKey, ProductSecret) gravé dans les appareils d'un produit est identique. Le système utilise un processus appelé « enregistrement dynamique » pour obtenir le DeviceSecret depuis IoT Platform en utilisant l'identifiant unique de l'appareil. Cet identifiant unique peut être le numéro de série (SN) ou l'adresse MAC, et il sera traité comme DeviceName.

Une fois que le SDK a obtenu le DeviceSecret de l'appareil depuis IoT Platform, il appelle HAL_SetDeviceSecret() pour sauvegarder cette valeur. L'appareil doit conserver ce DeviceSecret en mémoire Flash. Il ne doit pas être effacé après l'enregistrement dynamique, car IoT Platform refusera de fournir à nouveau le DeviceSecret si l'appareil en possède déjà un.

Pour utiliser l'authentification par certificat unique par produit, appelez simplement les interfaces suivantes afin d'activer la fonction d'enregistrement dynamique.

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

Exemple d'authentification par certificat unique par produit pour les produits de l'édition Basic

Accédez à Alibaba Cloud IoT Platform, sélectionnez le produit et activez « Dynamic-Registration » :

product

Créez maintenant un nouvel appareil sous ce produit :

product

Ouvrez le Link Kit SDK et remplacez le code comme suit :

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

Après avoir compilé le code, exécutez l'exemple de programme. La sortie ressemblera à ceci :

$./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 sortie d'exécution précédente indique que l'appareil a acquis le DeviceSecret via l'enregistrement dynamique.

(Device Secret): "KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4"

Le SDK appelle automatiquement HAL_Kv_Set pour rendre cette information persistante. Lors de la prochaine connexion de l'appareil à IoT Platform, le SDK récupérera cette valeur depuis la mémoire Flash. Si l'utilisateur tente d'utiliser à nouveau la fonction de certificat unique par produit sur le même appareil, le cloud renverra l'erreur suivante :

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

Prise en charge de la plateforme Alibaba Cloud Link Platform for Smart Living

Lorsque la mise en réseau est activée pour les appareils situés à l'étranger sur la Alibaba Cloud Link Platform for Smart Living, ils sont uniformément connectés au centre d'activation de Singapour. La plateforme assigne automatiquement les appareils aux nœuds de données les plus proches. Par exemple, les appareils activés aux États-Unis se connecteront automatiquement aux serveurs situés aux États-Unis.

Le SDK peut prendre en charge le mode Alibaba Cloud Link Platform for Smart Living en effectuant les deux configurations suivantes :

  1. Remplacez la valeur de FEATURE_MQTT_DIRECT dans make.setting par n, ce qui active le mode d'authentification HTTPS.

  2. Configurez le site de Singapour comme site de connexion :

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