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 allez entrer toutes les commandes sur votre système local dans une invite GitBash.Azure CLI. Vous avez le choix entre deux options pour exécuter les commandes Azure CLI dans cet article :
- Utilisez Azure Cloud Shell, un 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 est déjà installée, exécutez
az upgrade
pour la mettre à niveau, ainsi que les extensions, vers la version actuelle. Pour installer l’interface de ligne de commande Azure, consultez Installer l’interface de ligne de commande Azure.
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.
Pour une inscription individuelle, suivez la section Utiliser une inscription individuelle.
Pour un groupe d’inscriptions, suivez la section Utiliser un groupe d’inscriptions.
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.
Générez votre clé unique à l’aide d’openssl. Vous allez utiliser le script d’interpréteur de commandes 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
Le script va générer 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 SAS
Lors de l’utilisation de l’attestation des clés symétriques, les appareils s’authentifient auprès de DPS avec un jeton de signature d’accès partagé (SAS). 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 appareil dont le provisionnement est effectué par le biais d’un groupe d’inscriptions, le jeton est signé avec une clé d’appareil dérivée, elle-même générée avec la clé principale ou secondaire définie dans l’entrée du groupe d’inscriptions. 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 groupes.Si vous utilisez une inscription individuelle, utilisez la clé principale que vous avez enregistrée dans Utiliser une inscription individuelle.
Si vous utilisez un groupe d’inscriptions, utilisez la clé d’appareil dérivée que vous avez générée dans Utiliser un groupe d’inscriptions.
[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 SAS semblable à ce qui suit :
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 aurez besoin dans les sections suivantes.
Pour en découvrir plus sur l’utilisation de jetons SAS avec DPS et leur structure, consultez Contrôler l’accès à DPS avec SAS.
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 qu’il s’agit d’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 deutf-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"}'. Notez que pour curl, il est placé entre guillemets simples ; si, à la place, vous utilisez des guillemets doubles, vous devez, dans le JSON, faire précéder les guillemets doubles d’un caractère d’échappement.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
. Notez que vous devez remplacer[dps_scope_id]
et[registration_id]
par les valeurs appropriées.
Par 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 a une réponse similaire à ce qui suit :
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 avec l’API REST Recherche de l’état de l’opération pour déterminer quand votre appareil a été attribué ou si une défaillance s’est produite.
Les valeurs d’état valides pour DPS sont les suivantes :
assigned
: la valeur retournée de l’appel d’état indique à quel hub IoT l’appareil a été attribué.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é. UnerrorCode
et unerrorMessage
sont retournés dans un enregistrementregistrationState
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.
Par 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 pour un appareil qui a été attribué 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 groupes. (Il s’agit de la même clé que celle que vous avez utilisée pour créer un jeton pour DPS.)Si vous utilisez une inscription individuelle, utilisez la clé principale que vous avez enregistrée dans Utiliser une inscription individuelle.
Si vous utilisez un groupe d’inscriptions, utilisez la clé d’appareil dérivée que vous avez générée dans Utiliser un groupe d’inscriptions.
[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 surNone
.
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 découvrir plus sur la création de jetons SAS pour IoT Hub, y compris un 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 {iothub_name}
, vous avez uniquement besoin 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 qu’il s’agit d’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 deutf-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. Notez que pour curl, il est placé entre guillemets simples ; si, à la place, vous utilisez des guillemets doubles, vous devez, dans le JSON, faire précéder les guillemets doubles d’un caractère d’échappement.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. Dans le cas des appareils provisionnés par le biais de groupes d’inscriptions, l’ID d’appareil est l’ID d’inscription. 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 à ce qui suit :
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
Pour en découvrir plus sur l’attestation de clé symétrique, consultez Attestation de clé symétrique.
Pour en découvrir plus sur les jetons SAS et leur structure, consultez Contrôler l’accès à DPS avec SAS.