Partager via


Guide pratique pour utiliser des clés symétriques via HTTPS sans SDK

Dans cet article pratique, vous allez provisionner un appareil avec des clés symétriques via HTTPS sans utiliser de SDK d’appareil Azure IoT DPS. La plupart des langages fournissent des bibliothèques pour envoyer des demandes HTTP, mais, au lieu de vous concentrer sur un langage spécifique, dans cet article, vous allez utiliser l’outil en ligne de commande cURL pour les opérations d’envoi et de réception via HTTPS.

Vous pouvez suivre les étapes décrites dans cet article sur une machine Linux ou Windows. Si vous opérez sur le Sous-système Windows pour Linux (WSL) ou sur une machine Linux, vous pouvez entrer toutes les commandes sur votre système local dans une invite Bash. Si vous opérez sur Windows, entrez toutes les commandes sur votre système local dans une invite GitBash.

Il existe différents voies dans cet article en fonction du type d’entrée d’inscription que vous choisissez d’utiliser. Après avoir installé les prérequis, veillez à lire la Vue d’ensemble avant de continuer.

Prérequis

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  • Effectuez les étapes décrites dans Configurer le service IoT Hub Device Provisioning avec le portail Azure.

  • Assurez-vous que Python version 3.7 ou ultérieure est installé sur votre machine. Vous pouvez vérifier votre version de Python en exécutant python --version.

  • Si vous opérez sur Windows, installez la dernière version de Git. Vérifiez que Git est ajouté aux variables d’environnement accessibles à la fenêtre de commande. Consultez Outils clients Git de Software Freedom Conservancy pour accéder à la dernière version des outils git à installer, ce qui inclut Git Bash, l’application en ligne de commande que vous pouvez utiliser pour interagir avec votre dépôt Git local. Sur Windows, vous entrez toutes les commandes sur votre système local dans une ligne de commande GitBash.

  • Azure CLI. Vous avez le choix entre deux options pour exécuter les commandes Azure CLI dans cet article :

    • Utilisez Azure Cloud Shell, interpréteur de commandes interactif qui exécute des commandes CLI dans votre navigateur. Cette option est recommandée, car vous n’avez pas besoin d’installer quoi que ce soit. Si vous utilisez Cloud Shell pour la première fois, connectez-vous au portail Azure. Suivez les étapes décrites dans Démarrage rapide de Cloud Shell pour démarrer Cloud Shell et sélectionner l’environnement Bash.
    • Si vous le souhaitez, exécutez Azure CLI sur votre ordinateur local. Si l’interface de ligne de commande Azure (Azure CLI) est déjà installée, exécutez az upgrade pour la mettre à niveau, ainsi que pour mettre à niveau les extensions, vers la version actuelle. Pour installer Azure CLI, consultez Comment installer Azure CLI.
  • Si vous opérez dans un environnement Linux ou WSL, ouvrez une invite Bash pour exécuter les commandes localement. Si vous opérez dans un environnement Windows, ouvrez une invite GitBash.

Vue d’ensemble

Dans le cadre de cet article, vous pouvez utiliser une inscription individuelle ou un groupe d’inscriptions pour effectuer le provisionnement via DPS.

Une fois que vous avez créé l’entrée d’inscription individuelle ou de groupe d’inscriptions, passez à la création d’un jeton SAS et à l’inscription de votre appareil auprès de DPS.

Utiliser une inscription individuelle

Si, dans le cadre de cet article, vous souhaitez créer une inscription individuelle, vous pouvez utiliser la commande az iot dps enrollment create afin de créer une inscription individuelle pour l’attestation de clé symétrique.

La commande suivante crée une entrée d’inscription avec la stratégie d’allocation par défaut pour votre instance DPS et permet à DPS d’attribuer les clés principale et secondaire pour votre appareil :

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Substituez le nom de votre groupe de ressources et de votre instance DPS.

  • L’ID d’inscription est l’ID d’inscription de votre appareil. L’ID d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et des caractères spéciaux : '-', '.', '_', ':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-'). Veillez à ce que l’ID d’inscription que vous utilisez dans la commande respecte ce format.

Les clés symétriques attribuées sont retournées dans la propriété attestation de la réponse :


{
  "allocationPolicy": null,
  "attestation": {
    "symmetricKey": {
      "primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
      "secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
    },
    "tpm": null,
    "type": "symmetricKey",
    "x509": null
  },

  ...

}

Notez la clé principale et l’ID d’inscription de votre entrée d’inscription individuelle ; vous les utiliserez plus loin dans cet article.

Si vous souhaitez utiliser une inscription individuelle existante dans le cadre de cet article, vous pouvez obtenir la clé principale avec la commande az iot dps enrollment show :

az iot dps enrollment show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true

Utiliser un groupe d’inscriptions

Si, dans le cadre de cet article, vous souhaitez créer un groupe d’inscriptions, vous pouvez utiliser la commande az iot dps enrollment-group create afin de créer un groupe d’inscriptions pour l’attestation de clé symétrique.

La commande suivante crée une entrée de groupe d’inscriptions avec la stratégie d’allocation par défaut pour votre instance DPS et permet à DPS d’attribuer les clés principale et secondaire de votre groupe d’inscriptions :

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Substituez le nom de votre groupe de ressources et de votre instance DPS.

  • L’ID d’inscription est une chaîne ne respectant pas la casse (jusqu’à 128 caractères) composée de caractères alphanumériques et des caractères spéciaux : '-', '.', '_', ':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-'). Il peut s’agir de n’importe quel nom que vous choisissez d’utiliser pour le groupe d’inscriptions.

Les clés symétriques attribuées sont retournées dans la propriété attestation de la réponse :


{
  "allocationPolicy": null,
  "attestation": {
    "symmetricKey": {
      "primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
      "secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
    },
    "tpm": null,
    "type": "symmetricKey",
    "x509": null
  },

  ...

}

Notez la clé principale.

Si vous souhaitez utiliser un groupe d’inscriptions existant dans le cadre de cet article, vous pouvez obtenir la clé principale avec la commande az iot dps enrollment-group show :

az iot dps enrollment-group show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true

Dériver une clé d’appareil

Quand vous utilisez l’attestation de clé symétrique avec des inscriptions de groupe, vous ne vous servez pas directement des clés du groupe d’inscriptions. Au lieu de cela, vous dérivez une clé unique pour chaque appareil à partir de la clé du groupe d’inscriptions. Pour plus d’informations, consultez Inscriptions de groupe avec des clés symétriques.

Dans cette section, vous allez générer une clé d’appareil à partir de la clé principale du groupe d’inscriptions pour calculer un HMAC-SHA256 de l’ID d’inscription unique de l’appareil. Le résultat est ensuite converti au format Base64.

  1. Générez votre clé unique à l’aide d’openssl. Vous utilisez le script shell Bash suivant. Remplacez {primary-key} par la clé principale du groupe d’inscriptions que vous avez copiée et remplacez {contoso-simdevice} par l’ID d’inscription que vous souhaitez utiliser pour l’appareil. L’ID d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et des caractères spéciaux : '-', '.', '_', ':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-').

    KEY={primary-key}
    REG_ID={contoso-simdevice}
    
    keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
    echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
    
  2. Le script génère quelque chose comme la clé suivante :

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Notez la clé d’appareil dérivée et l’ID d’inscription que vous avez utilisé pour la générer ; vous les utiliserez dans la section suivante.

Vous pouvez également utiliser Azure CLI ou PowerShell pour dériver une clé d’appareil. Pour en savoir plus, consultez Dériver une clé d’appareil.

Créez un jeton SAP

Lorsque vous utilisez l’attestation de clé symétrique, les appareils s’authentifient auprès de DPS à l’aide d’un jeton SAS (Shared Access Signature). Pour les appareils dont le provisionnement est effectué par le biais d’une inscription individuelle, le jeton est signé avec la clé principale ou secondaire définie dans l’entrée de l’inscription. Pour un approvisionnement d’appareils via un groupe d’inscription, le jeton est signé à l’aide d’une clé d’appareil dérivée, qui, à son tour, est générée à l’aide de la clé primaire ou secondaire définie dans l’entrée du groupe d’inscription. Le jeton spécifie une heure d’expiration et un URI de ressource cible.

Le script Python suivant peut être utilisé pour générer un jeton SAS :

from base64 import b64encode, b64decode
from hashlib import sha256
from time import time
from urllib.parse import quote_plus, urlencode
from hmac import HMAC

def generate_sas_token(uri, key, policy_name, expiry=3600):
     ttl = time() + expiry
     sign_key = "%s\n%d" % ((quote_plus(uri)), int(ttl))
     print(sign_key)
     signature = b64encode(HMAC(b64decode(key), sign_key.encode('utf-8'), sha256).digest())

     rawtoken = {
         'sr' :  uri,
         'sig': signature,
         'se' : str(int(ttl))
     }

     if policy_name is not None:
         rawtoken['skn'] = policy_name

     return 'SharedAccessSignature ' + urlencode(rawtoken)

uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= '[policy]'

print(generate_sas_token(uri, key, policy, expiry))

Où :

  • [resource_uri] est l’URI de la ressource à laquelle vous essayez d’accéder avec ce jeton. Pour DPS, il se présente sous la forme [dps_id_scope]/registrations/[dps_registration_id], où [dps_id_scope] est l’étendue de l’ID de votre instance DPS et [dps_registration_id] est l’ID d’inscription que vous avez utilisé pour votre appareil.

    Vous pouvez obtenir l’étendue de l’ID pour votre instance DPS à partir du volet Vue d’ensemble de votre instance dans le portail Azure, ou vous pouvez utiliser la commande Azure CLI az iot dps show (remplacez les espaces réservés par le nom de votre groupe de ressources et de votre instance DPS) :

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] est la clé d’appareil associée à votre appareil. Cette clé est celle spécifiée ou générée automatiquement pour vous dans une inscription individuelle, ou une clé dérivée pour une inscription de groupe.

  • [expiry_in_seconds] est la période de validité de ce jeton SAS en secondes.

  • [policy] est la stratégie à laquelle la clé d’appareil est associée. Pour l’inscription d’appareil DPS, la stratégie est codée en dur sur « registration ».

Un exemple d’ensemble d’entrées pour un appareil appelé my-symkey-device avec une période de validité de 30 jours peut ressembler à ceci.

uri = '0ne00111111/registrations/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 2592000
policy='registration'

Modifiez le script pour votre appareil et votre instance DPS et enregistrez-le en tant que fichier Python ; par exemple, generate_token.py. Exécutez le script, par exemple, python generate_token.py. Il doit générer un jeton SAP similaire à l’exemple suivant :

0ne00111111%2Fregistrations%2Fmy-symkey-device
1663952627
SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration

Copiez et enregistrez la ligne entière qui commence par SharedAccessSignature. Cette ligne est le jeton SAS. Vous en avez besoin dans les sections suivantes.

Pour en savoir plus sur l’utilisation de jetons SAS avec DPS et leur structure, consultez Contrôler l’accès au service Azure IoT Hub Device Provisioning (DPS) avec des signatures d’accès partagé et des jetons de sécurité.

Inscrire votre appareil

Vous appelez l’API REST Inscrire un appareil pour provisionner votre appareil par le biais de DPS.

Utilisez la commande curl suivante :

curl -L -i -X PUT -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

Où :

  • -L indique à curl de suivre les redirections HTTP.

  • –i indique à curl d’inclure les en-têtes de protocole dans la sortie. Ces en-têtes ne sont pas absolument nécessaires, mais ils peuvent être utiles.

  • -X PUT indique à curl que cette commande est une commande HTTP PUT. Requis pour cet appel d’API.

  • -H 'Content-Type: application/json' indique à DPS que nous envoyons du contenu JSON et que le type doit être « application/json ».

  • -H 'Content-Encoding: utf-8' indique à DPS l’encodage que nous utilisons pour le corps de notre message. Définissez la valeur appropriée pour votre système d’exploitation/client ; toutefois, il s’agit généralement de utf-8.

  • -H 'Authorization: [sas_token]' indique à DPS de procéder à l’authentification en utilisant votre jeton SAS. Remplacez [sas_token] par le jeton que vous avez généré dans Créer un jeton SAS.

  • -d '{"registrationId": "[registration_id]"}' : le paramètre –d représente les « données » ou le corps du message que nous envoyons. Ce doit être du JSON, sous la forme '{"registrationId":"[registration_id"}'. Pour curl, il est encapsulé entre guillemets simples ; sinon, vous devez échapper aux guillemets doubles dans le code JSON.

  • Enfin, le dernier paramètre est l’URL à laquelle envoyer le contenu. Dans le cas d’une utilisation « normale » de DPS (c’est-à-dire non locale), le point de terminaison DPS global, global.azure-devices-provisioning.net, est utilisé : https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Vous devez remplacer [dps_scope_id] et [registration_id] par les valeurs appropriées.

Exemple :

curl -L -i -X PUT -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration' -d '{"registrationId": "my-symkey-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/register?api-version=2021-06-01

Un appel réussi fournit une réponse similaire à l’exemple suivant :

HTTP/1.1 202 Accepted
Date: Wed, 31 Aug 2022 22:02:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/register
Retry-After: 3
x-ms-request-id: a021814f-0cf6-4ce9-a1e9-ead7eb5118d9
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.316aac5bdc130deb.b1e02da8-c3a0-4ff2-a121-7ea7a6b7f550","status":"assigning"}

La réponse contient un ID d’opération et un état. En l’occurrence, l’état est défini sur assigning. L’inscription DPS est potentiellement une opération de longue durée. Elle est donc effectuée de manière asynchrone. En règle générale, vous interrogez l’état à l’aide de l’API REST Recherche d’état d’opération pour déterminer quand votre appareil est affecté ou si une défaillance se produit.

Les valeurs d’état valides pour DPS sont les suivantes :

  • assigned: la valeur de retour de l’appel d’état indique à quel ioT Hub l’appareil a été affecté.

  • assigning : l’opération est toujours en cours.

  • disabled : l’enregistrement d’inscription est désactivé dans DPS ; l’appareil ne peut donc pas être attribué.

  • failed : l’attribution a échoué. Un errorCode et errorMessage sont retournés dans un enregistrement registrationState dans la réponse pour indiquer ce qui a échoué.

  • unassigned

Pour appeler l’API Recherche de l’état de l’opération, utilisez la commande curl suivante :

curl -L -i -X GET -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

Vous utilisez les mêmes étendue d’ID, ID d’inscription et jeton SAS que ceux que vous avez utilisés dans la demande Inscrire un appareil. Utilisez l’ID d’opération qui a été retourné dans la réponse Inscrire un appareil.

Exemple :

curl -L -i -X GET -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/operations/5.316aac5bdc130deb.f4f1828c-4dab-4ca9-98b2-dfc63b5835d6?api-version=2021-06-01

La sortie suivante montre la réponse d’un appareil affecté avec succès. Notez que la propriété status est assigned et que la propriété registrationState.assignedHub est définie sur le hub IoT où l’appareil a été provisionné.

HTTP/1.1 200 OK
Date: Wed, 31 Aug 2022 22:05:23 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: ffb98d42-023e-4e75-afb0-1807ff091cbb
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.316aac5bdc130deb.b1e02da8-c3a0-4ff2-a121-7ea7a6b7f550",
   "status":"assigned",
   "registrationState":{
      "registrationId":"my-symkey-device",
      "createdDateTimeUtc":"2022-08-31T22:02:50.5163352Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-symkey-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-31T22:02:50.7370676Z",
      "etag":"IjY5MDAzNTUyLTAwMDAtMDMwMC0wMDAwLTYzMGZkYThhMDAwMCI="
   }
}

Envoyer un message de télémétrie

Avant de pouvoir envoyer un message de télémétrie, vous devez créer un jeton SAS pour le hub IoT auquel l’appareil a été attribué. Vous signez ce jeton avec la clé principale ou clé d’appareil dérivée que vous avez utilisée pour signer le jeton SAS pour votre instance DPS.

Créer un jeton SAS pour votre hub IoT

Pour créer le jeton SAS, vous pouvez exécuter le même code que celui que vous avez utilisé pour créer le jeton pour votre instance DPS, avec les modifications suivantes :

uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= None

Où :

  • [resource_uri] est l’URI de la ressource à laquelle vous essayez d’accéder avec ce jeton. Pour un appareil qui envoie des messages à un hub IoT, il se présente sous la forme [iot-hub-host-name]/devices/[device-id].

    • Pour [iot-hub-host-name], utilisez le nom d’hôte de hub IoT retourné dans la propriété assignedHub dans la section précédente.

    • Pour [device-id], utilisez l’ID d’appareil retourné dans la propriété deviceId dans la section précédente.

  • [device_key] est la clé d’appareil associée à votre appareil. Cette clé est celle spécifiée ou générée automatiquement pour vous dans une inscription individuelle, ou une clé dérivée pour une inscription de groupe. (Il s’agit de la même clé que celle que vous avez utilisée pour créer un jeton pour DPS.)

  • [expiry_in_seconds] est la période de validité de ce jeton SAS en secondes.

  • policy=None Aucune stratégie n’est requise pour un appareil qui envoie de la télémétrie à un hub IoT. Ce paramètre est donc défini sur None.

Voici ce à quoi peut ressembler un ensemble d’entrées pour un appareil appelé my-symkey-device envoyant des données à un hub IoT nommé MyExampleHub avec une période de validité de jeton d’une heure :

uri = 'MyExampleHub.azure-devices.net/devices/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 3600
policy= None

La sortie suivante montre un exemple de jeton SAS pour ces entrées :

SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026

Pour en savoir plus sur la création de jetons SAP pour IoT Hub, notamment l’exemple de code dans d’autres langages de programmation, consultez Contrôler l’accès à IoT Hub à l’aide de signatures d’accès partagé.

Remarque

Pour des raisons pratiques, vous pouvez utiliser la commande Azure CLI az iot hub generate-sas-token afin d’obtenir un jeton SAS pour un appareil inscrit auprès d’un hub IoT. Par exemple, la commande suivante génère un jeton SAS d’une durée d’une heure. Pour le {iothub_name}, vous n’avez besoin que de la première partie du nom d’hôte, par exemple MyExampleHub.

az iot hub generate-sas-token -d {device_id} -n {iothub_name}

Envoyer des données à votre hub IoT

Vous appelez l’API REST Envoyer un événement d’appareil IoT Hub pour envoyer de la télémétrie à l’appareil.

Utilisez la commande curl suivante :

curl -L -i -X POST -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

Où :

  • -X POST indique à curl que cette commande est une commande HTTP POST. Requis pour cet appel d’API.

  • -H 'Content-Type: application/json' indique à IoT Hub que nous envoyons du contenu JSON et que le type doit être « application/json ».

  • -H 'Content-Encoding: utf-8' indique à IoT Hub l’encodage que nous utilisons pour le corps de notre message. Définissez la valeur appropriée pour votre système d’exploitation/client ; toutefois, il s’agit généralement de utf-8.

  • -H 'Authorization: [sas_token]' indique à IoT Hub de procéder à l’authentification en utilisant votre jeton SAS. Remplacez [sas_token] par le jeton que vous avez généré pour le hub IoT attribué.

  • -d '{"temperature": 30}' : le paramètre –d représente les « données » ou le corps du message que nous envoyons. Dans le cadre de cet article, nous envoyons un seul point de données de température. Le type de contenu a été spécifié comme étant application/json. Ainsi, pour cette demande, le corps est en JSON. Pour curl, il est encapsulé entre guillemets simples ; sinon, vous devez échapper aux guillemets doubles dans le code JSON.

  • Le dernier paramètre est l’URL à laquelle envoyer le contenu. Pour l’API Envoyer un événement d’appareil, l’URL est : https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Remplacez [assigned_iot_hub_name] par le nom du hub IoT auquel votre appareil a été attribué.

    • Remplacez [device_id] par l’ID d’appareil qui a été attribué quand vous avez inscrit votre appareil. Pour les appareils qui provisionnent via des groupes d’inscription, l’ID de périphérique est l’ID d'enregistrement. Pour les inscriptions individuelles, vous pouvez éventuellement spécifier un ID d’appareil différent de l’ID d’inscription dans l’entrée d’inscription.

Par exemple, pour un appareil dont l’ID est my-symkey-device et qui envoie un point de données de télémétrie à un hub IoT nommé MyExampleHub :

curl -L -i -X POST -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-symkey-device/messages/events?api-version=2020-03-13

Un appel réussi a une réponse similaire à l’exemple suivant :

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: 9e278582-3561-417b-b807-76426195920f
Date: Wed, 14 Sep 2022 00:32:53 GMT

Étapes suivantes