Delen via


Symmetrische sleutels gebruiken via HTTPS zonder SDK

In dit artikel gaat u een apparaat inrichten met behulp van symmetrische sleutels via HTTPS zonder een Azure IoT DPS device SDK te gebruiken. De meeste talen bieden bibliotheken voor het verzenden van HTTP-aanvragen, maar in plaats van zich te richten op een specifieke taal, gebruikt u in dit artikel het cURL-opdrachtregelprogramma voor het verzenden en ontvangen via HTTPS.

U kunt de stappen in dit artikel volgen op een Linux- of Windows-computer. Als u op Windows-subsysteem voor Linux (WSL) of op een Linux-computer werkt, kunt u alle opdrachten op uw lokale systeem invoeren in een Bash-prompt. Als u windows gebruikt, voert u alle opdrachten op uw lokale systeem in in een GitBash-prompt.

Er zijn verschillende paden in dit artikel, afhankelijk van het type inschrijvingsvermelding dat u wilt gebruiken. Nadat u de vereisten hebt geïnstalleerd, moet u het overzicht lezen voordat u doorgaat.

Vereisten

  • Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

  • Voer de stappen uit in IoT Hub Device Provisioning Service instellen met Azure Portal.

  • Zorg ervoor dat Python 3.7 of hoger is geïnstalleerd op uw computer. U kunt uw versie van Python controleren door python --version uit te voeren.

  • Als u werkt in Windows, installeert u de nieuwste versie van Git. Zorg ervoor dat Git is toegevoegd aan de omgevingsvariabelen die toegankelijk zijn voor het opdrachtvenster. Zie de Git-clienthulpprogramma's van Software Freedom Conservancy voor de nieuwste versie van git hulpprogramma's die u kunt installeren, waaronder Git Bash, de opdrachtregel-app die u kunt gebruiken om te communiceren met uw lokale Git-opslagplaats. In Windows voert u alle opdrachten op uw lokale systeem in in een GitBash-prompt.

  • Azure CLI. U hebt twee opties voor het uitvoeren van Azure CLI-opdrachten in dit artikel:

    • Gebruik De Azure Cloud Shell, een interactieve shell waarmee CLI-opdrachten in uw browser worden uitgevoerd. Deze optie wordt aanbevolen omdat u niets hoeft te installeren. Als u Cloud Shell voor het eerst gebruikt, meldt u zich aan bij Azure Portal. Volg de stappen in de quickstart van Cloud Shell om Cloud Shell te starten en de Bash-omgeving te selecteren.
    • Voer desgewenst Azure CLI uit op uw lokale computer. Als Azure CLI al is geïnstalleerd, voert u een az upgrade upgrade uit van de CLI en extensies naar de huidige versie. Zie Azure CLI installeren om Azure CLI te installeren.
  • Als u in een Linux- of WSL-omgeving werkt, opent u een Bash-prompt om opdrachten lokaal uit te voeren. Als u in een Windows-omgeving werkt, opent u een GitBash-prompt.

Overzicht

Voor dit artikel kunt u een afzonderlijke inschrijving of een inschrijvingsgroep gebruiken om in te richten via DPS.

Nadat u de afzonderlijke inschrijvings- of inschrijvingsgroepvermelding hebt gemaakt, gaat u verder met het maken van een SAS-token en registreert u uw apparaat bij DPS.

Een afzonderlijke inschrijving gebruiken

Als u een nieuwe afzonderlijke inschrijving wilt maken voor dit artikel, kunt u de opdracht az iot dps enrollment create gebruiken om een afzonderlijke inschrijving te maken voor attestation met symmetrische sleutels.

Met de volgende opdracht maakt u een inschrijvingsvermelding met het standaardtoewijzingsbeleid voor uw DPS-exemplaar en kan DPS de primaire en secundaire sleutels voor uw apparaat toewijzen:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Vervang de naam van uw resourcegroep en DPS-exemplaar.

  • De inschrijvings-id is de registratie-id voor uw apparaat. De registratie-id is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_'. ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn. Zorg ervoor dat de inschrijvings-id die u in de opdracht gebruikt, voldoet aan deze indeling.

De toegewezen symmetrische sleutels worden geretourneerd in de attestation-eigenschap in het antwoord:


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

  ...

}

Noteer de primaire sleutel en de registratie-id (inschrijvings-id) voor uw afzonderlijke inschrijvingsvermelding. U gebruikt deze later in dit artikel.

Als u een bestaande afzonderlijke inschrijving voor dit artikel wilt gebruiken, kunt u de primaire sleutel ophalen met de opdracht 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

Een inschrijvingsgroep gebruiken

Als u een nieuwe inschrijvingsgroep wilt maken die voor dit artikel moet worden gebruikt, kunt u de opdracht az iot dps enrollment-group create gebruiken om een inschrijvingsgroep te maken voor attestation met symmetrische sleutels.

Met de volgende opdracht maakt u een inschrijvingsgroepvermelding met het standaardtoewijzingsbeleid voor uw DPS-exemplaar en kan DPS de primaire en secundaire sleutels voor de inschrijvingsgroep toewijzen:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Vervang de naam van uw resourcegroep en DPS-exemplaar.

  • De inschrijvings-id is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_', . ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn. Dit kan elke naam zijn die u wilt gebruiken voor de inschrijvingsgroep.

De toegewezen symmetrische sleutels worden geretourneerd in de attestation-eigenschap in het antwoord:


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

  ...

}

Noteer de primaire sleutel.

Als u een bestaande afzonderlijke inschrijving voor dit artikel wilt gebruiken, kunt u de primaire sleutel ophalen met de opdracht 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

Een apparaatsleutel afleiden

Wanneer u een attestation voor symmetrische sleutels gebruikt met groepsinschrijvingen, gebruikt u de sleutels van de inschrijvingsgroep niet rechtstreeks. In plaats daarvan leidt u een unieke sleutel af voor elk apparaat van de inschrijvingsgroepssleutel. Zie Groepsinschrijvingen met symmetrische sleutels voor meer informatie.

In deze sectie genereert u een apparaatsleutel van de primaire sleutel van de inschrijvingsgroep om een HMAC-SHA256 van de unieke registratie-id voor het apparaat te berekenen. Het resultaat wordt vervolgens geconverteerd naar de Base64-indeling.

  1. Genereer uw unieke sleutel met behulp van openssl. U gebruikt het volgende Bash-shellscript. Vervang {primary-key} door de primaire sleutel van de inschrijvingsgroep die u eerder hebt gekopieerd en vervang deze door {contoso-simdevice}de registratie-id die u voor het apparaat wilt gebruiken. De registratie-id is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_'. ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn.

    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. Het script voert ongeveer als de volgende sleutel uit:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Noteer de afgeleide apparaatsleutel en de registratie-id die u hebt gebruikt om deze te genereren. U gebruikt deze in de volgende sectie.

U kunt ook de Azure CLI of PowerShell gebruiken om een apparaatsleutel af te leiden. Zie Een apparaatsleutel afleiden voor meer informatie.

Een SAS-token maken

Wanneer u symmetrische sleutelverklaring gebruikt, worden apparaten geverifieerd met DPS met behulp van een SAS-token (Shared Access Signature). Voor apparaten die worden ingericht via een afzonderlijke inschrijving, wordt het token ondertekend met behulp van de primaire of secundaire sleutel die is ingesteld in de inschrijvingsvermelding. Voor apparaatinrichting via een inschrijvingsgroep wordt het token ondertekend met behulp van een afgeleide apparaatsleutel, die op zijn beurt is gegenereerd met behulp van de primaire of secundaire sleutel die is ingesteld in de vermelding van de inschrijvingsgroep. Het token geeft een verlooptijd en een doelresource-URI op.

Het volgende Python-script kan worden gebruikt om een SAS-token te genereren:

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))

Hierin:

  • [resource_uri] is de URI van de resource die u probeert te openen met dit token. Voor DPS is het van het formulier [dps_id_scope]/registrations/[dps_registration_id], waar [dps_id_scope] het id-bereik van uw DPS-exemplaar is en [dps_registration_id] de registratie-id is die u voor uw apparaat hebt gebruikt.

    U kunt het id-bereik voor uw DPS-exemplaar ophalen in het deelvenster Overzicht van uw exemplaar in Azure Portal of u kunt de Azure CLI-opdracht az iot dps gebruiken (vervang de tijdelijke aanduidingen door de naam van uw resourcegroep en DPS-exemplaar):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] is de apparaatsleutel die is gekoppeld aan uw apparaat. Deze sleutel is het opgegeven of automatisch gegenereerde sleutel voor u in een afzonderlijke inschrijving of een afgeleide sleutel voor een groepsinschrijving.

    • Als u een afzonderlijke inschrijving gebruikt, gebruikt u de primaire sleutel die u hebt opgeslagen in Een afzonderlijke inschrijving gebruiken.

    • Als u een inschrijvingsgroep gebruikt, gebruikt u de afgeleide apparaatsleutel die u hebt gegenereerd in Een inschrijvingsgroep gebruiken.

  • [expiry_in_seconds] is de geldigheidsperiode van dit SAS-token in seconden.

  • [policy] is het beleid waaraan de apparaatsleutel is gekoppeld. Voor DPS-apparaatregistratie is het beleid vastgelegd in 'registratie'.

Een voorbeeldset invoer voor een apparaat dat wordt aangeroepen my-symkey-device met een geldigheidsperiode van 30 dagen kan er als volgt uitzien.

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

Wijzig het script voor uw apparaat en DPS-exemplaar en sla het op als een Python-bestand; Bijvoorbeeld generate_token.py. Voer bijvoorbeeld het script python generate_token.pyuit. Er moet een SAS-token worden uitgevoerd dat vergelijkbaar is met het volgende:

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

Kopieer en sla de hele regel op die begint met SharedAccessSignature. Deze regel is het SAS-token. U hebt deze nodig in de volgende secties.

Zie Toegang tot DPS beheren met SAS-tokens met SAS voor meer informatie over het gebruik van SAS-tokens en hun structuur.

Uw apparaat registreren

U roept de REST API apparaat registreren aan om uw apparaat in te richten via DPS.

Gebruik de volgende curl-opdracht:

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

Hierin:

  • -L vertelt curl om HTTP-omleidingen te volgen.

  • –i vertelt curl protocolheaders in uitvoer op te nemen. Deze headers zijn niet strikt noodzakelijk, maar kunnen nuttig zijn.

  • -X PUT vertelt curl dat dit een HTTP PUT-opdracht is. Vereist voor deze API-aanroep.

  • -H 'Content-Type: application/json' vertelt DPS dat we JSON-inhoud plaatsen en moet 'application/json' zijn.

  • -H 'Content-Encoding: utf-8' vertelt DPS dat de codering die we gebruiken voor de berichttekst. Ingesteld op de juiste waarde voor uw besturingssysteem/client; het is echter over het algemeen utf-8.

  • -H 'Authorization: [sas_token]' laat DPS verifiëren met behulp van uw SAS-token. Vervang [sas_token] door het token dat u hebt gegenereerd in Een SAS-token maken.

  • -d '{"registrationId": "[registration_id]"}', de –d parameter is de 'gegevens' of hoofdtekst van het bericht dat we plaatsen. Dit moet JSON zijn, in de vorm van {"registrationId":"[registration_id"}. Houd er rekening mee dat het voor curl is verpakt in enkele aanhalingstekens; anders moet u de dubbele aanhalingstekens in de JSON ontsnappen.

  • Ten slotte is de laatste parameter de URL waarnaar moet worden geplaatst. Voor 'reguliere' (dat wil niet on-premises) DPS, wordt het globale DPS-eindpunt, global.azure-devices-provisioning.net, gebruikt: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Houd er rekening mee dat u de juiste waarden moet vervangen [dps_scope_id] en [registration_id] vervangen.

Voorbeeld:

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

Een geslaagde aanroep heeft een antwoord dat lijkt op het volgende:

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"}

Het antwoord bevat een bewerkings-id en een status. In dit geval is de status ingesteld op assigning. DPS-inschrijving is mogelijk een langdurige bewerking, dus deze wordt asynchroon uitgevoerd. Normaal gesproken peilt u naar status met behulp van de REST API voor het opzoeken van bewerkingsstatussen om te bepalen wanneer uw apparaat is toegewezen of of er een fout is opgetreden.

De geldige statuswaarden voor DPS zijn:

  • assigned: de retourwaarde van de statusoproep geeft aan aan aan welke IoT Hub het apparaat is toegewezen.

  • assigning: de bewerking wordt nog steeds uitgevoerd.

  • disabled: de registratierecord is uitgeschakeld in DPS, zodat het apparaat niet kan worden toegewezen.

  • failed: de toewijzing is mislukt. Er wordt een errorCode en errorMessage geretourneerd in een registrationState record in het antwoord om aan te geven wat er is mislukt.

  • unassigned

Gebruik de volgende curl-opdracht om de Lookup-API voor bewerkingsstatus aan te roepen:

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

U gebruikt hetzelfde id-bereik, de registratie-id en het SAS-token als in de aanvraag Apparaat registreren. Gebruik de bewerkings-id die is geretourneerd in het antwoord Apparaat registreren.

Voorbeeld:

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

In de volgende uitvoer ziet u het antwoord voor een apparaat dat is toegewezen. U ziet dat de status eigenschap is assigned en dat de registrationState.assignedHub eigenschap is ingesteld op de IoT-hub waar het apparaat is ingericht.

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="
   }
}

Een telemetriebericht verzenden

Voordat u een telemetriebericht kunt verzenden, moet u een SAS-token maken voor de IoT-hub waaraan het apparaat is toegewezen. U ondertekent dit token met dezelfde primaire sleutel of afgeleide apparaatsleutel die u hebt gebruikt om het SAS-token voor uw DPS-exemplaar te ondertekenen.

Een SAS-token maken voor uw IoT-hub

Als u het SAS-token wilt maken, kunt u dezelfde code uitvoeren die u hebt gedaan om het token voor uw DPS-exemplaar te maken met de volgende wijzigingen:

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

Hierin:

  • [resource_uri] is de URI van de resource die u probeert te openen met dit token. Voor een apparaat dat berichten naar een IoT-hub verzendt, is dit van het formulier [iot-hub-host-name]/devices/[device-id].

    • Gebruik [iot-hub-host-name]voor de IoT Hub-hostnaam die is geretourneerd in de assignedHub eigenschap in de vorige sectie.

    • Gebruik [device-id]hiervoor de apparaat-id die is geretourneerd in de deviceId eigenschap in de vorige sectie.

  • [device_key] is de apparaatsleutel die is gekoppeld aan uw apparaat. Deze sleutel is het opgegeven of automatisch gegenereerde sleutel voor u in een afzonderlijke inschrijving of een afgeleide sleutel voor een groepsinschrijving. (Dit is dezelfde sleutel die u eerder hebt gebruikt om een token te maken voor DPS.)

    • Als u een afzonderlijke inschrijving gebruikt, gebruikt u de primaire sleutel die u hebt opgeslagen in Een afzonderlijke inschrijving gebruiken.

    • Als u een inschrijvingsgroep gebruikt, gebruikt u de afgeleide apparaatsleutel die u hebt gegenereerd in Een inschrijvingsgroep gebruiken.

  • [expiry_in_seconds] is de geldigheidsperiode van dit SAS-token in seconden.

  • policy=None Er is geen beleid vereist voor een apparaat dat telemetrie verzendt naar een IoT-hub, dus deze parameter is ingesteld op None.

Een voorbeeldset invoer voor een apparaat met de naam my-symkey-device Verzenden naar een IoT Hub met MyExampleHub een geldigheidsperiode van een token van één uur kan er als volgt uitzien:

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

In de volgende uitvoer ziet u een voorbeeld van een SAS-token voor deze invoer:

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

Zie Toegang tot IoT Hub beheren met shared access Signatures voor meer informatie over het maken van SAS-tokens voor IoT Hub, inclusief voorbeeldcode in andere programmeertalen.

Notitie

U kunt de Azure CLI az iot hub generate-sas-token-opdracht gebruiken om een SAS-token op te halen voor een apparaat dat is geregistreerd bij een IoT-hub. Met de volgende opdracht wordt bijvoorbeeld een SAS-token gegenereerd met een duur van één uur. Voor de {iothub_name}, u hebt alleen het eerste deel van de host hame, bijvoorbeeld MyExampleHub.

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

Gegevens verzenden naar uw IoT-hub

U roept de REST API voor Apparaat gebeurtenis verzenden van IoT Hub aan om telemetrie naar het apparaat te verzenden.

Gebruik de volgende curl-opdracht:

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

Hierin:

  • -X POST vertelt curl dat dit een HTTP POST-opdracht is. Vereist voor deze API-aanroep.

  • -H 'Content-Type: application/json' vertelt IoT Hub dat we JSON-inhoud plaatsen en moet 'application/json' zijn.

  • -H 'Content-Encoding: utf-8' vertelt IoT Hub over de codering die we gebruiken voor de berichttekst. Ingesteld op de juiste waarde voor uw besturingssysteem/client; het is echter over het algemeen utf-8.

  • -H 'Authorization: [sas_token]' vertelt IoT Hub om te verifiëren met behulp van uw SAS-token. Vervang [sas_token] door het token dat u hebt gegenereerd voor de toegewezen IoT-hub.

  • -d '{"temperature": 30}', de –d parameter is de 'gegevens' of hoofdtekst van het bericht dat we plaatsen. Voor dit artikel plaatsen we één temperatuurgegevenspunt. Het inhoudstype is opgegeven als application/json, dus voor deze aanvraag is de hoofdtekst JSON. Houd er rekening mee dat het voor curl is verpakt in enkele aanhalingstekens; anders moet u de dubbele aanhalingstekens in de JSON ontsnappen.

  • De laatste parameter is de URL waarnaar moet worden geplaatst. Voor de Gebeurtenis-API apparaat verzenden is de URL: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Vervang [assigned_iot_hub_name] door de naam van de IoT-hub waaraan uw apparaat is toegewezen.

    • Vervang [device_id] door de apparaat-id die is toegewezen toen u uw apparaat registreerde. Voor apparaten die worden ingericht via inschrijvingsgroepen, is de apparaat-id de registratie-id. Voor afzonderlijke inschrijvingen kunt u desgewenst een apparaat-id opgeven die verschilt van de registratie-id in de inschrijvingsvermelding.

Bijvoorbeeld voor een apparaat met een apparaat-id van het verzenden van my-symkey-device een telemetriegegevenspunt naar een IoT-hub met de naam 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

Een geslaagde aanroep heeft een antwoord dat lijkt op het volgende:

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

Volgende stappen