Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Anleitungsartikel wird ein Gerät unter Verwendung von symmetrischen Schlüsseln über HTTPS ohne Verwendung eines Azure IoT DPS-Geräte-SDK bereitgestellt. Die meisten Sprachen bieten Bibliotheken zum Senden von HTTP-Anforderungen. In diesem Artikel wird allerdings das Befehlszeilentool cURL zum Senden und Empfangen über HTTPS verwendet, anstatt sich auf eine bestimmte Sprache zu konzentrieren.
Die Schritte in diesem Artikel können sowohl auf einem Linux-Computer als auch auf einem Windows-Computer ausgeführt werden. Bei Verwendung des Windows-Subsystems für Linux (WSL) oder auf einem Linux-Computer können Sie alle Befehle auf Ihrem lokalen System in eine Bash-Eingabeaufforderung eingeben. Geben Sie unter Windows alle Befehle auf Ihrem lokalen System in eine GitBash-Eingabeaufforderung ein.
In diesem Artikel gibt es verschiedene Pfade, abhängig von der Art des verwendeten Registrierungseintrags. Sehen Sie nach der Installation der erforderlichen Komponenten unbedingt zunächst die Übersicht an.
Voraussetzungen
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Führen Sie die Schritte im Artikel Einrichten des IoT Hub Device Provisioning Service im Azure-Portal aus.
Stellen Sie sicher, dass auf Ihrem Computer mindestens Python 3.7 installiert ist. Durch Ausführen von
python --versionkönnen Sie überprüfen, welche Python-Version verwendet wird.Installieren Sie unter Windows die neueste Version von Git. Stellen Sie sicher, dass Git den Umgebungsvariablen hinzugefügt wurde, auf die das Befehlsfenster Zugriff hat. Unter den Git-Clienttools von Software Freedom Conservancy finden Sie die neueste Version der zu installierenden
git-Tools. Hierzu zählt auch die Befehlszeilen-App Git Bash, über die Sie mit Ihrem lokalen Git-Repository interagieren können. Unter Windows geben Sie alle Befehle auf Ihrem lokalen System in einer GitBash-Eingabeaufforderung ein.Azure-Befehlszeilenschnittstelle. In diesem Artikel gibt es zwei Möglichkeiten zum Ausführen von Azure CLI-Befehlen:
- Verwenden Sie Azure Cloud Shell. Dabei handelt es sich um eine interaktive Shell, mit der CLI-Befehle im Browser ausgeführt werden. Diese Option wird empfohlen, da Sie nichts installieren müssen. Wenn Sie Cloud Shell zum ersten Mal verwenden, melden Sie sich beim Azure-Portal an. Führen Sie in der Cloud Shell-Schnellstartanleitung die Schritte zum Starten von Cloud Shell und Auswählen der Bash-Umgebung aus.
- Führen Sie optional die Azure CLI auf dem lokalen Computer aus. Wenn die Azure CLI bereits installiert ist, führen Sie
az upgradeaus, um die CLI und die Erweiterungen auf die aktuelle Version zu aktualisieren. Informationen zum Installieren von Azure CLI finden Sie unter Installieren der Azure CLI.
Öffnen Sie bei Verwendung einer Linux- oder WSL-Umgebung eine Bash-Eingabeaufforderung, um Befehle lokal auszuführen. In einer Windows-Umgebung können Sie eine GitBash-Eingabeaufforderung öffnen.
Übersicht
In diesem Artikel können Sie entweder eine individuelle Registrierung oder eine Registrierungsgruppe für die Bereitstellung über DPS verwenden.
Für eine Einzelregistrierung, führen Sie die Aktion Einzelregistrierung verwenden aus.
Durchlaufen Sie bei einer Registrierungsgruppe den Abschnitt Verwenden einer Registrierungsgruppe.
Nachdem Sie den Eintrag für einzelne Registrierungs- oder Registrierungsgruppen erstellt haben, erstellen Sie weiterhin ein SAS-Token , und registrieren Sie Ihr Gerät bei DPS.
Verwenden einer individuellen Registrierung
Wenn Sie für diesen Artikel eine neue individuelle Registrierung erstellen möchten, können Sie den Befehl az iot dps enrollment create verwenden, um eine individuelle Registrierung für den Nachweis des symmetrischen Schlüssels zu erstellen.
Der folgende Befehl erstellt einen Registrierungseintrag mit der Standardzuweisungsrichtlinie für Ihre DPS-Instanz und ermöglicht es DPS, den Primärschlüssel und den Sekundärschlüssel für Ihr Gerät zuzuweisen:
az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
Ersetzen Sie den Namen Ihrer Ressourcengruppe und Ihrer DPS-Instanz.
Die Registrierungs-ID ist die Registrierungs-ID für Ihr Gerät. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen:
'-','.','_',':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein. Achten Sie darauf, dass die im Befehl verwendete Registrierungs-ID diesem Format entspricht.
Die zugewiesenen symmetrischen Schlüssel werden in der Antwort in der Nachweiseigenschaft (attestation) zurückgegeben:
{
"allocationPolicy": null,
"attestation": {
"symmetricKey": {
"primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
"secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
},
"tpm": null,
"type": "symmetricKey",
"x509": null
},
...
}
Notieren Sie sich den Primärschlüssel und die Registrierungs-ID (Registrierungs-ID) für Ihren individuellen Registrierungseintrag, die Sie später in diesem Artikel verwenden.
Wenn Sie für diesen Artikel eine bereits vorhandene individuelle Registrierung verwenden möchten, können Sie den Primärschlüssel mit dem Befehl az iot dps enrollment show abrufen:
az iot dps enrollment show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true
Verwenden einer Registrierungsgruppe
Wenn Sie für diesen Artikel eine neue Registrierungsgruppe erstellen möchten, können Sie den Befehl az iot dps enrollment-group create verwenden, um eine Registrierungsgruppe für den Nachweis des symmetrischen Schlüssels zu erstellen.
Der folgende Befehl erstellt einen Registrierungsgruppeneintrag mit der Standardzuweisungsrichtlinie für Ihre DPS-Instanz und ermöglicht es DPS, den Primärschlüssel und den Sekundärschlüssel für die Registrierungsgruppe zuzuweisen:
az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
Ersetzen Sie den Namen Ihrer Ressourcengruppe und Ihrer DPS-Instanz.
Die Registrierungs-ID ist eine von der Groß- und Kleinschreibung unabhängige, bis zu 128-stellige Zeichenfolge, die alphanumerische Zeichen und folgende Sonderzeichen enthalten kann:
'-','.','_',':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein. Dabei kann es sich um einen beliebigen Namen handeln, den Sie für die Registrierungsgruppe verwenden möchten.
Die zugewiesenen symmetrischen Schlüssel werden in der Antwort in der Nachweiseigenschaft (attestation) zurückgegeben:
{
"allocationPolicy": null,
"attestation": {
"symmetricKey": {
"primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
"secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
},
"tpm": null,
"type": "symmetricKey",
"x509": null
},
...
}
Notieren Sie sich den Primärschlüssel.
Wenn Sie für diesen Artikel eine bereits vorhandene individuelle Registrierung verwenden möchten, können Sie den Primärschlüssel mit dem Befehl az iot dps enrollment-group show abrufen:
az iot dps enrollment-group show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true
Ableiten eines Geräteschlüssels
Bei Verwendung des Nachweises des symmetrischen Schlüssels mit Gruppenregistrierungen verwenden Sie die Registrierungsgruppenschlüssel nicht direkt. Stattdessen leiten Sie für jedes Gerät einen eindeutigen Schlüssel vom Registrierungsgruppenschlüssel ab. Weitere Informationen finden Sie unter Gruppenregistrierungen mit symmetrischen Schlüsseln.
In diesem Abschnitt generieren Sie einen Geräteschlüssel aus dem Primärschlüssel der Registrierungsgruppe, um eine HMAC-SHA256 der eindeutigen Registrierungs-ID für das Gerät zu berechnen. Das Ergebnis wird dann in das Base64-Format konvertiert.
Erzeugen Sie Ihren eindeutigen Schlüssel mit openssl. Sie verwenden das folgende Bash-Shellskript. Ersetzen Sie
{primary-key}durch den Primärschlüssel der Registrierungsgruppe, den Sie zuvor kopiert haben, und ersetzen Sie{contoso-simdevice}durch die Registrierungs-ID, die Sie für das Gerät verwenden möchten. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen:'-','.','_',':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein.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 | base64Das Skript gibt etwas wie den folgenden Schlüssel aus:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Notieren Sie sich den abgeleiteten Geräteschlüssel sowie die Registrierungs-ID, die Sie zum Generieren verwendet haben, und verwenden Sie sie im nächsten Abschnitt.
Sie können auch die Azure CLI oder PowerShell verwenden, um einen Geräteschlüssel abzuleiten. Weitere Informationen finden Sie unter Ableiten eines Geräteschlüssels.
Erstellen eines SAS-Token
Wenn Sie den symmetrischen Schlüsselnachweis verwenden, authentifizieren sich Geräte mit DPS mit einem SAS-Token (Shared Access Signature). Bei der Gerätebereitstellung über eine einzelne Registrierung wird das Token mit dem im Registrierungseintrag festgelegten Primär- oder Sekundärschlüssel signiert. Bei einer Gerätebereitstellung über eine Registrierungsgruppe wird das Token mit einem abgeleiteten Geräteschlüssel signiert, der wiederum mithilfe des im Registrierungsgruppeneintrag festgelegten Primär- oder Sekundärschlüssels generiert wird. Das Token gibt eine Ablaufzeit und einen Zielressourcen-URI an.
Zum Generieren eines SAS-Tokens kann das folgende Python-Skript verwendet werden:
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))
Hierbei gilt:
[resource_uri]ist der URI der Ressource, auf die Sie mit diesem Token zugreifen möchten. Für DPS hat er das Format[dps_id_scope]/registrations/[dps_registration_id]. Dabei ist[dps_id_scope]der ID-Bereich Ihrer DPS-Instanz und[dps_registration_id]die Registrierungs-ID, die Sie für Ihr Gerät verwendet haben.Den ID-Bereich für Ihre DPS-Instanz können Sie im Azure-Portal im Bereich Übersicht Ihrer Instanz ermitteln. Alternativ können Sie den Azure CLI-Befehl az iot dps show verwenden. Ersetzen Sie dabei die Platzhalter durch den Namen Ihrer Ressourcengruppe und Ihrer DPS-Instanz:
az iot dps show -g {resource_group_name} --name {dps_name}[device_key]ist der Geräteschlüssel, der Ihrem Gerät zugeordnet ist. Dieser Schlüssel ist entweder der angegebene oder automatisch generierte Schlüssel für Sie in einer einzelnen Registrierung oder ein abgeleiteter Schlüssel für eine Gruppenregistrierung.Verwenden Sie im Falle einer individuellen Registrierung den Primärschlüssel, den Sie in Verwenden einer individuellen Registrierung gespeichert haben.
Falls Sie eine Registrierungsgruppe verwenden, verwenden Sie den abgeleiteten Geräteschlüssel, den Sie in Verwenden einer Registrierungsgruppe generiert haben.
[expiry_in_seconds]ist die Gültigkeitsdauer dieses SAS-Tokens in Sekunden.[policy]ist die Richtlinie, der der Geräteschlüssel zugeordnet ist. Für die DPS-Geräteregistrierung ist die Richtlinie auf „registration“ hartcodiert.
Eingaben für ein Gerät namens my-symkey-device mit einer Gültigkeitsdauer von 30 Tagen können beispielsweise wie folgt aussehen:
uri = '0ne00111111/registrations/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 2592000
policy='registration'
Ändern Sie das Skript für Ihr Gerät und Ihre DPS-Instanz, und speichern Sie es als Python-Datei (Beispiel: generate_token.py). Führen Sie das Skript aus (Beispiel: python generate_token.py). Es sollte ein SAS-Token ausgeben, das dem folgenden Beispiel ähnelt:
0ne00111111%2Fregistrations%2Fmy-symkey-device
1663952627
SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration
Kopieren und speichern Sie die gesamte Zeile, die mit SharedAccessSignature beginnt. Diese Zeile ist das SAS-Token. Sie benötigen sie in den folgenden Abschnitten.
Weitere Informationen zur Verwendung von SAS-Token mit DPS und deren Struktur finden Sie unter Steuern des Zugriffs auf den Azure IoT Hub Device Provisioning Service (DPS) mit freigegebenen Zugriffssignaturen und Sicherheitstoken.
Registrieren Ihres Geräts
Rufen Sie die REST-API für die Geräteregistrierung auf, um Ihr Gerät über DPS bereitzustellen.
Verwenden Sie den folgenden cURL-Befehl:
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
Hierbei gilt:
-Lweist cURL an, HTTP-Umleitungen zu folgen.–iweist cURL an, Protokollheader in die Ausgabe einzuschließen. Diese Header sind nicht zwingend erforderlich, können aber hilfreich sein.-X PUTweist curl an, dass dieser Befehl ein HTTP PUT-Befehl ist. Erforderlich für diesen API-Aufruf.-H 'Content-Type: application/json'teilt DPS mit, dass JSON-Inhalte veröffentlicht werden, und muss „application/json“ sein.-H 'Content-Encoding: utf-8'teilt DPS die für den Nachrichtentext verwendete Codierung mit. Verwenden Sie den entsprechenden Code für Ihr Betriebssystem bzw. Ihren Client. Das ist üblicherweiseutf-8.-H 'Authorization: [sas_token]'weist DPS an, sich mit Ihrem SAS-Token zu authentifizieren. Ersetzen Sie „[sas_token]“ durch das Token, das Sie unter Erstellen eines SAS-Token generiert haben.-d '{"registrationId": "[registration_id]"}': Bei dem Parameter–dhandelt es sich um die Daten oder um den Text der veröffentlichten Nachricht. Hierbei muss es sich um JSON-Code im folgenden Format handeln: '{"registrationId":"[registration_id"}'. Für cURL wird er in einfache Anführungszeichen eingeschlossen. Andernfalls müssen die doppelten Anführungszeichen im JSON-Code mit Escapezeichen versehen werden.Der letzte Parameter ist die URL für die Veröffentlichung. Bei einer regulären (nicht lokalen) DPS-Instanz wird der globale DPS-Endpunkt global.azure-devices-provisioning.net verwendet:
https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Sie müssen[dps_scope_id]und[registration_id]durch die entsprechenden Werte ersetzen.
Beispiel:
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
Ein erfolgreicher Aufruf bietet eine Antwort ähnlich dem folgenden Beispiel:
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"}
Die Antwort enthält eine Vorgangs-ID und einen Status. In diesem Fall lautet der Status assigning. Die DPS-Registrierung ist unter Umständen ein zeitintensiver Vorgang und wird daher asynchron ausgeführt. In der Regel rufen Sie den Status mithilfe der REST-API für den Vorgangsstatus ab , um festzustellen, wann Ihr Gerät zugewiesen wird oder ob ein Fehler auftritt.
Gültige Statuswerte für DPS sind:
assigned: Der Rückgabewert aus dem Statusaufruf gibt an, welcher IoT Hub dem Gerät zugewiesen wurde.assigning: Der Vorgang wird noch ausgeführt.disabled: Der Registrierungsdatensatz ist in DPS deaktiviert. Das Gerät kann somit nicht zugewiesen werden.failed: Die Zuweisung war nicht erfolgreich. In der Antwort werden in einem Datensatz vom TypregistrationStateein Fehlercode (errorCode) und eine Fehlermeldung (errorMessage) zurückgegeben, die Aufschluss über den Fehler geben.unassigned
Verwenden Sie den folgenden cURL-Befehl, um die API zum Ermitteln des Vorgangsstatus aufzurufen:
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
Sie verwenden denselben ID-Bereich, die Registrierungs-ID und das SAS-Token wie in der Registrierungsgeräteanforderung . Verwenden Sie die Vorgangs-ID, die in der Antwort von Gerät registrieren zurückgegeben wurde.
Beispiel:
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
Die folgende Ausgabe zeigt die Antwort für ein Gerät, das erfolgreich zugewiesen wurde. Beachten Sie, dass die Eigenschaft status den Wert assigned hat und dass die Eigenschaft registrationState.assignedHub auf den IoT-Hub festgelegt ist, für den das Gerät bereitgestellt wurde.
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="
}
}
Senden einer Telemetrienachricht
Bevor Sie eine Telemetrienachricht senden können, müssen Sie ein SAS-Token für den IoT-Hub erstellen, dem das Gerät zugewiesen wurde. Sie signieren dieses Token mit dem gleichen Primärschlüssel oder abgeleiteten Geräteschlüssel, den Sie zum Signieren des SAS-Tokens für Ihre DPS-Instanz verwendet haben.
Erstellen eines SAS-Tokens für Ihren IoT-Hub
Um das SAS-Token zu erstellen, können Sie den gleichen Code ausführen, den Sie auch zum Erstellen des Tokens für Ihre DPS-Instanz ausgeführt haben – allerdings mit folgenden Änderungen:
uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= None
Hierbei gilt:
[resource_uri]ist der URI der Ressource, auf die Sie mit diesem Token zugreifen möchten. Bei einem Gerät, das Nachrichten an einen IoT-Hub sendet, hat er das Format[iot-hub-host-name]/devices/[device-id].Verwenden Sie für
[iot-hub-host-name]den Hostnamen des IoT-Hubs, der im vorherigen Abschnitt in der EigenschaftassignedHubzurückgegeben wurde.Verwenden Sie für
[device-id]die Geräte-ID, die im vorherigen Abschnitt in der EigenschaftdeviceIdzurückgegeben wurde.
[device_key]ist der Geräteschlüssel, der Ihrem Gerät zugeordnet ist. Dieser Schlüssel ist entweder der angegebene oder automatisch generierte Schlüssel für Sie in einer einzelnen Registrierung oder ein abgeleiteter Schlüssel für eine Gruppenregistrierung. (Das ist der gleiche Schlüssel, den Sie zuvor beim Erstellen eines Tokens für DPS verwendet haben.)Verwenden Sie im Falle einer individuellen Registrierung den Primärschlüssel, den Sie in Verwenden einer individuellen Registrierung gespeichert haben.
Falls Sie eine Registrierungsgruppe verwenden, verwenden Sie den abgeleiteten Geräteschlüssel, den Sie in Verwenden einer Registrierungsgruppe generiert haben.
[expiry_in_seconds]ist die Gültigkeitsdauer dieses SAS-Tokens in Sekunden.policy=None: Für ein Gerät, das Telemetriedaten an einen IoT-Hub sendet, ist keine Richtlinie erforderlich, daher ist dieser Parameter aufNonefestgelegt.
Eingaben für ein Gerät namens my-symkey-device, das Daten an eine IoT-Hub-Instanz namens MyExampleHub sendet und über eine Tokengültigkeitsdauer von einer Stunde verfügt, können beispielsweise wie folgt aussehen:
uri = 'MyExampleHub.azure-devices.net/devices/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 3600
policy= None
Die folgende Ausgabe zeigt ein SAS-Beispieltoken für diese Eingaben:
SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026
Weitere Informationen zum Erstellen von SAS-Token für IoT Hub, einschließlich Beispielcode in anderen Programmiersprachen, finden Sie unter Steuern des Zugriffs auf IoT Hub mithilfe von freigegebenen Zugriffssignaturen.
Hinweis
Der Einfachheit halber können Sie den Azure CLI-Befehl az iot hub generate-sas-token verwenden, um ein SAS-Token für ein Gerät abzurufen, das bei einem IoT-Hub registriert ist. Mit dem folgenden Befehl wird beispielsweise ein SAS-Token mit einer Gültigkeitsdauer von einer Stunde generiert. Für den {iothub_name} benötigen Sie nur den ersten Teil des Hostnamens, zum Beispiel MyExampleHub.
az iot hub generate-sas-token -d {device_id} -n {iothub_name}
Senden von Daten an Ihren IoT-Hub
Rufen Sie die REST-API zum Senden von Geräteereignissen von IoT Hub auf, um Telemetriedaten an das Gerät zu senden.
Verwenden Sie den folgenden cURL-Befehl:
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
Hierbei gilt:
-X POSTweist curl an, dass dieser Befehl ein HTTP POST-Befehl ist. Erforderlich für diesen API-Aufruf.-H 'Content-Type: application/json'teilt IoT Hub mit, dass JSON-Inhalte veröffentlicht werden, und muss „application/json“ sein.-H 'Content-Encoding: utf-8'teilt IoT Hub die für den Nachrichtentext verwendete Codierung mit. Verwenden Sie den entsprechenden Code für Ihr Betriebssystem bzw. Ihren Client. Das ist üblicherweiseutf-8.-H 'Authorization: [sas_token]'weist IoT Hub an, sich mit Ihrem SAS-Token zu authentifizieren. Ersetzen Sie[sas_token]durch das Token, das Sie für den zugewiesenen IoT-Hub generiert haben.-d '{"temperature": 30}': Bei dem Parameter–dhandelt es sich um die Daten oder um den Text der veröffentlichten Nachricht. Für diesen Artikel wird ein einzelner Temperaturdatenpunkt veröffentlicht. Der Inhaltstyp wurde als „application/json“ angegeben. Der Text für diese Anforderung ist also JSON-Code. Für cURL wird er in einfache Anführungszeichen eingeschlossen. Andernfalls müssen die doppelten Anführungszeichen im JSON-Code mit Escapezeichen versehen werden.Der letzte Parameter ist die URL für die Veröffentlichung. Für die API zum Senden von Geräteereignissen lautet die URL
https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.Ersetzen Sie
[assigned_iot_hub_name]durch den Namen des IoT-Hubs, dem Ihr Gerät zugewiesen wurde.Ersetzen Sie
[device_id]durch die Geräte-ID, die bei der Registrierung Ihres Geräts zugewiesen wurde. Für Geräte, die über Registrierungsgruppen bereitgestellt werden, ist die Geräte-ID die Registrierungs-ID. Bei einzelnen Registrierungen können Sie optional eine Geräte-ID angeben, die sich von der Registrierungs-ID im Registrierungseintrag unterscheidet.
Hier sehen Sie ein Beispiel für ein Gerät mit der Geräte-ID my-symkey-device, das einen Telemetriedatenpunkt an einen IoT-Hub namens MyExampleHub sendet:
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
Ein erfolgreicher Anruf hat eine Antwort ähnlich wie im folgenden Beispiel:
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
Nächste Schritte
Weitere Informationen zum Nachweis des symmetrischen Schlüssels finden Sie unter Nachweis des symmetrischen Schlüssels.
Weitere Informationen zu SAS-Token und deren Struktur finden Sie unter Steuern des Zugriffs auf den Azure IoT Hub Device Provisioning Service (DPS) mit freigegebenen Zugriffssignaturen und Sicherheitstoken.