Jak używać kluczy symetrycznych za pośrednictwem protokołu HTTPS bez zestawu SDK

W tym artykule z instrukcjami aprowizujesz urządzenie przy użyciu kluczy symetrycznych za pośrednictwem protokołu HTTPS bez korzystania z zestawu SDK urządzenia usługi Azure IoT DPS. Większość języków udostępnia biblioteki do wysyłania żądań HTTP, ale zamiast skupiać się na określonym języku, w tym artykule użyjesz narzędzia wiersza polecenia cURL do wysyłania i odbierania za pośrednictwem protokołu HTTPS.

Możesz wykonać kroki opisane w tym artykule na maszynie z systemem Linux lub Windows. Jeśli korzystasz z Podsystem Windows dla systemu Linux (WSL) lub na maszynie z systemem Linux, możesz wprowadzić wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki Bash. Jeśli korzystasz z systemu Windows, wprowadź wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki GitBash.

Istnieją różne ścieżki w tym artykule w zależności od typu wpisu rejestracji, którego chcesz użyć. Po zainstalowaniu wymagań wstępnych przed kontynuowaniem zapoznaj się z omówieniem.

Wymagania wstępne

  • Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Wykonaj kroki opisane w temacie Konfigurowanie usługi IoT Hub Device Provisioning Przy użyciu witryny Azure Portal.

  • Upewnij się, że na maszynie jest zainstalowany język Python w wersji 3.7 lub nowszej. Możesz sprawdzić swoją wersję języka Python, uruchamiając polecenie python --version.

  • Jeśli korzystasz z systemu Windows, zainstaluj najnowszą wersję narzędzia Git. Upewnij się, że usługa Git jest dodawana do zmiennych środowiskowych dostępnych w oknie polecenia. Zobacz Narzędzia klienckie Git firmy Software Freedom Conservancy, aby zapoznać się z najnowszą wersją git narzędzi do zainstalowania, która obejmuje powłokę Git Bash, aplikację wiersza polecenia, której można użyć do interakcji z lokalnym repozytorium Git. W systemie Windows wprowadzisz wszystkie polecenia w systemie lokalnym w wierszu polecenia powłoki GitBash.

  • Interfejs wiersza polecenia platformy Azure. Dostępne są dwie opcje uruchamiania poleceń interfejsu wiersza polecenia platformy Azure w tym artykule:

    • Użyj usługi Azure Cloud Shell — interaktywnej powłoki, która uruchamia polecenia interfejsu wiersza polecenia w przeglądarce. Ta opcja jest zalecana, ponieważ nie trzeba instalować żadnych elementów. Jeśli używasz usługi Cloud Shell po raz pierwszy, zaloguj się do witryny Azure Portal. Wykonaj kroki opisane w przewodniku Szybki start usługi Cloud Shell, aby uruchomić usługę Cloud Shell i wybrać środowisko powłoki Bash.
    • Opcjonalnie uruchom interfejs wiersza polecenia platformy Azure na komputerze lokalnym. Jeśli interfejs wiersza polecenia platformy Azure jest już zainstalowany, uruchom polecenie az upgrade , aby uaktualnić interfejs wiersza polecenia i rozszerzenia do bieżącej wersji. Aby zainstalować interfejs wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Jeśli używasz systemu Linux lub środowiska WSL, otwórz wiersz powłoki Bash, aby uruchomić polecenia lokalnie. Jeśli korzystasz ze środowiska systemu Windows, otwórz wiersz polecenia GitBash.

Omówienie

W tym artykule można użyć rejestracji indywidualnej lub grupy rejestracji do aprowizacji za pośrednictwem usługi DPS.

Po utworzeniu wpisu indywidualnej rejestracji lub grupy rejestracji kontynuuj tworzenie tokenu SYGNATURy dostępu współdzielonego i rejestrowanie urządzenia w usłudze DPS.

Używanie rejestracji indywidualnej

Jeśli chcesz utworzyć nową rejestrację indywidualną do użycia w tym artykule, możesz użyć polecenia az iot dps enrollment create , aby utworzyć rejestrację indywidualną na potrzeby zaświadczania klucza symetrycznego.

Następujące polecenie tworzy wpis rejestracji z domyślnymi zasadami alokacji dla wystąpienia usługi DPS i umożliwia usłudze DPS przypisanie kluczy podstawowych i pomocniczych dla urządzenia:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Zastąp nazwę grupy zasobów i wystąpienia usługi DPS.

  • Identyfikator rejestracji to identyfikator rejestracji urządzenia. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'). Upewnij się, że identyfikator rejestracji używany w poleceniu jest zgodny z tym formatem.

Przypisane klucze symetryczne są zwracane we właściwości zaświadczania w odpowiedzi:


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

  ...

}

Zanotuj klucz podstawowy i identyfikator rejestracji (identyfikator rejestracji) dla wpisu rejestracji indywidualnej, użyjesz ich w dalszej części tego artykułu.

Jeśli chcesz użyć istniejącej rejestracji indywidualnej dla tego artykułu, możesz uzyskać klucz podstawowy za pomocą polecenia 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

Korzystanie z grupy rejestracji

Jeśli chcesz utworzyć nową grupę rejestracji do użycia w tym artykule, możesz użyć polecenia az iot dps enrollment-group create , aby utworzyć grupę rejestracji na potrzeby zaświadczania klucza symetrycznego.

Następujące polecenie tworzy wpis grupy rejestracji z domyślnymi zasadami alokacji dla wystąpienia usługi DPS i umożliwia usłudze DPS przypisanie kluczy podstawowych i pomocniczych dla grupy rejestracji:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Zastąp nazwę grupy zasobów i wystąpienia usługi DPS.

  • Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'). Może to być dowolna nazwa, której chcesz użyć dla grupy rejestracji.

Przypisane klucze symetryczne są zwracane we właściwości zaświadczania w odpowiedzi:


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

  ...

}

Zanotuj klucz podstawowy.

Jeśli chcesz użyć istniejącej rejestracji indywidualnej w tym artykule, możesz uzyskać klucz podstawowy za pomocą polecenia 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

Uzyskiwanie klucza urządzenia

W przypadku korzystania z zaświadczania klucza symetrycznego z rejestracjami grup nie należy używać kluczy grupy rejestracji bezpośrednio. Zamiast tego należy utworzyć unikatowy klucz dla każdego urządzenia z klucza grupy rejestracji. Aby uzyskać więcej informacji, zobacz Rejestrowanie grup przy użyciu kluczy symetrycznych.

W tej sekcji wygenerujesz klucz urządzenia z klucza podstawowego grupy rejestracji w celu obliczenia HMAC-SHA256 unikatowego identyfikatora rejestracji urządzenia. Wynik zostanie następnie przekonwertowany na format Base64.

  1. Wygeneruj unikatowy klucz przy użyciu polecenia openssl. Użyjesz następującego skryptu powłoki Bash. Zastąp element {primary-key} kluczem podstawowym grupy rejestracji skopiowaną wcześniej i zastąp {contoso-simdevice}ciąg identyfikatorem rejestracji, którego chcesz użyć dla urządzenia. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-').

    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. Skrypt wyświetli dane wyjściowe podobne do następującego klucza:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Zanotuj pochodny klucz urządzenia i identyfikator rejestracji użyty do jego wygenerowania, użyjesz ich w następnej sekcji.

Możesz również użyć interfejsu wiersza polecenia platformy Azure lub programu PowerShell, aby uzyskać klucz urządzenia. Aby dowiedzieć się więcej, zobacz Tworzenie klucza urządzenia.

Tworzenie tokenu SAS

W przypadku korzystania z zaświadczania klucza symetrycznego urządzenia uwierzytelniają się w usłudze DPS przy użyciu tokenu sygnatury dostępu współdzielonego (SAS). W przypadku urządzeń aprowizowania za pośrednictwem rejestracji indywidualnej token jest podpisany przy użyciu klucza podstawowego lub pomocniczego ustawionego we wpisie rejestracji. W przypadku aprowizacji urządzeń za pośrednictwem grupy rejestracji token jest podpisany przy użyciu pochodnego klucza urządzenia, który z kolei został wygenerowany przy użyciu klucza podstawowego lub pomocniczego ustawionego we wpisie grupy rejestracji. Token określa czas wygaśnięcia i identyfikator URI zasobu docelowego.

Do wygenerowania tokenu SYGNATURy dostępu współdzielonego można użyć następującego skryptu języka Python:

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

Gdzie:

  • [resource_uri] to identyfikator URI zasobu, do którego próbujesz uzyskać dostęp za pomocą tego tokenu. W przypadku usługi DPS jest to formularz [dps_id_scope]/registrations/[dps_registration_id], gdzie [dps_id_scope] jest zakresem identyfikatora wystąpienia usługi DPS i [dps_registration_id] jest identyfikatorem rejestracji używanym dla urządzenia.

    Zakres identyfikatora wystąpienia usługi DPS można uzyskać w okienku Przegląd wystąpienia w witrynie Azure Portal lub możesz użyć polecenia az iot dps show interfejsu wiersza polecenia platformy Azure (zastąp symbole zastępcze nazwą grupy zasobów i wystąpienia usługi DPS):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] to klucz urządzenia skojarzony z urządzeniem. Ten klucz jest określony lub wygenerowany automatycznie dla Użytkownika w ramach rejestracji indywidualnej lub klucz pochodny dla rejestracji grupy.

    • Jeśli używasz rejestracji indywidualnej, użyj klucza podstawowego zapisanego w temacie Użyj rejestracji indywidualnej.

    • Jeśli używasz grupy rejestracji, użyj pochodnego klucza urządzenia wygenerowanego w sekcji Używanie grupy rejestracji.

  • [expiry_in_seconds] to okres ważności tego tokenu SYGNATURy dostępu współdzielonego w sekundach.

  • [policy] to zasady, z którymi jest skojarzony klucz urządzenia. W przypadku rejestracji urządzeń w usłudze DPS zasady są zakodowane jako "rejestracja".

Przykładowy zestaw danych wejściowych dla urządzenia o nazwie my-symkey-device z okresem ważności 30 dni może wyglądać następująco.

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

Zmodyfikuj skrypt dla urządzenia i wystąpienia usługi DPS i zapisz go jako plik w języku Python; na przykład generate_token.py. Uruchom skrypt, na przykład python generate_token.py. Powinien on wyświetlić token SAS podobny do następującego:

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

Skopiuj i zapisz cały wiersz rozpoczynający się od SharedAccessSignature. Ten wiersz jest tokenem SAS. Będą potrzebne w poniższych sekcjach.

Aby dowiedzieć się więcej na temat używania tokenów SAS z usługą DPS i ich strukturą, zobacz Kontrola dostępu do usługi DPS przy użyciu sygnatury dostępu współdzielonego.

Rejestrowanie własnego urządzenia

Aby aprowizować urządzenie za pośrednictwem usługi DPS, należy wywołać interfejs API REST rejestrowania urządzeń .

Użyj następującego polecenia curl:

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

Gdzie:

  • -L polecenie curl, aby postępować zgodnie z przekierowaniami HTTP.

  • –i polecenie curl, aby uwzględnić nagłówki protokołu w danych wyjściowych. Te nagłówki nie są ściśle niezbędne, ale mogą być przydatne.

  • -X PUT polecenie curl informuje, że jest to polecenie HTTP PUT. Wymagane dla tego wywołania interfejsu API.

  • -H 'Content-Type: application/json' informuje usługę DPS, że publikujemy zawartość JSON i musi mieć wartość "application/json".

  • -H 'Content-Encoding: utf-8' informuje usługę DPS o kodowaniu używanym dla naszej treści komunikatu. Ustaw odpowiednią wartość dla systemu operacyjnego/klienta; jednak zazwyczaj jest to utf-8.

  • -H 'Authorization: [sas_token]' informuje usługę DPS o uwierzytelnienie przy użyciu tokenu SAS. Zastąp ciąg [sas_token] tokenem wygenerowanym w sekcji Tworzenie tokenu SAS.

  • -d '{"registrationId": "[registration_id]"}'–d, parametr to "dane" lub treść komunikatu, który publikujemy. Musi to być kod JSON w postaci "{"registrationId":"[registration_id"}". Należy pamiętać, że w przypadku elementu curl jest on owinięty pojedynczym cudzysłowem; w przeciwnym razie należy ująć podwójne cudzysłowy w formacie JSON.

  • Na koniec ostatnim parametrem jest adres URL do opublikowania. W przypadku "zwykłego" (tj. nie lokalnego) usługi DPS używany jest globalny punkt końcowy usługi DPS, global.azure-devices-provisioning.net: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Należy pamiętać, że musisz zastąpić [dps_scope_id] wartości i [registration_id] odpowiednimi wartościami.

Na przykład:

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

Pomyślne wywołanie będzie miało odpowiedź podobną do następującej:

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

Odpowiedź zawiera identyfikator operacji i stan. W takim przypadku stan ma wartość assigning. Rejestracja w usłudze DPS jest potencjalnie długotrwałą operacją, więc jest wykonywana asynchronicznie. Zazwyczaj sondujesz stan przy użyciu interfejsu API REST wyszukiwania stanu operacji, aby określić, kiedy urządzenie zostało przypisane lub czy wystąpił błąd.

Prawidłowe wartości stanu dla usługi DPS to:

  • assigned: wartość zwracana z wywołania stanu wskaże, do czego przypisano urządzenie.

  • assigning: operacja jest nadal uruchomiona.

  • disabled: rekord rejestracji jest wyłączony w usłudze DPS, więc nie można przypisać urządzenia.

  • failed: przypisanie nie powiodło się. W odpowiedzi zostanie errorCode zwrócony registrationState element i errorMessage , aby wskazać, co się nie powiodło.

  • unassigned

Aby wywołać interfejs API wyszukiwania stanu operacji, użyj następującego polecenia curl:

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żyjesz tego samego zakresu identyfikatora, identyfikatora rejestracji i tokenu SAS, jak pokazano w żądaniu rejestrowanie urządzenia . Użyj identyfikatora operacji zwróconego w odpowiedzi Zarejestruj urządzenie .

Na przykład:

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

W poniższych danych wyjściowych przedstawiono odpowiedź urządzenia, które zostało pomyślnie przypisane. Zwróć uwagę, że status właściwość to assigned i że registrationState.assignedHub właściwość jest ustawiona na centrum IoT, w którym aprowizowano urządzenie.

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

Wysyłanie komunikatu telemetrii

Przed wysłaniem komunikatu telemetrii należy utworzyć token SAS dla centrum IoT, do którego przypisano urządzenie. Ten token należy podpisać przy użyciu tego samego klucza podstawowego lub pochodnego klucza urządzenia, który został użyty do podpisania tokenu SAS dla wystąpienia usługi DPS.

Tworzenie tokenu SAS dla centrum IoT

Aby utworzyć token SAS, możesz uruchomić ten sam kod, który został utworzony w celu utworzenia tokenu dla wystąpienia usługi DPS z następującymi zmianami:

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

Gdzie:

  • [resource_uri] to identyfikator URI zasobu, do którego próbujesz uzyskać dostęp za pomocą tego tokenu. W przypadku urządzenia wysyłającego komunikaty do centrum IoT Hub jest to formularz [iot-hub-host-name]/devices/[device-id].

    • W przypadku [iot-hub-host-name]programu użyj nazwy hosta usługi IoT Hub zwróconej assignedHub we właściwości w poprzedniej sekcji.

    • W przypadku [device-id]elementu użyj identyfikatora urządzenia zwróconego deviceId we właściwości w poprzedniej sekcji.

  • [device_key] to klucz urządzenia skojarzony z urządzeniem. Ten klucz jest określony lub wygenerowany automatycznie dla Użytkownika w ramach rejestracji indywidualnej lub klucz pochodny dla rejestracji grupy. (Jest to ten sam klucz, który został wcześniej użyty do utworzenia tokenu dla usługi DPS).

    • Jeśli używasz rejestracji indywidualnej, użyj klucza podstawowego zapisanego w temacie Użyj rejestracji indywidualnej.

    • Jeśli używasz grupy rejestracji, użyj pochodnego klucza urządzenia wygenerowanego w sekcji Używanie grupy rejestracji.

  • [expiry_in_seconds] to okres ważności tego tokenu SYGNATURy dostępu współdzielonego w sekundach.

  • policy=None Żadne zasady nie są wymagane dla urządzenia wysyłającego dane telemetryczne do centrum IoT, więc ten parametr jest ustawiony na Nonewartość .

Przykładowy zestaw danych wejściowych dla urządzenia o nazwie my-symkey-device wysyłania do usługi IoT Hub o nazwie MyExampleHub z okresem ważności tokenu o godzinie może wyglądać następująco:

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

Następujące dane wyjściowe przedstawiają przykładowy token SAS dla tych danych wejściowych:

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

Aby dowiedzieć się więcej na temat tworzenia tokenów SAS dla usługi IoT Hub, w tym przykładowego kodu w innych językach programowania, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu sygnatur dostępu współdzielonego.

Uwaga

Dla wygody możesz użyć polecenia interfejsu wiersza polecenia platformy Azure az iot hub generate-sas-token , aby uzyskać token SAS dla urządzenia zarejestrowanego w centrum IoT. Na przykład następujące polecenie generuje token SAS z czasem trwania jednej godziny. W przypadku elementu {iothub_name}potrzebna jest tylko pierwsza część hame hosta, na przykład MyExampleHub.

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

Wysyłanie danych do centrum IoT

Wywołasz interfejs API REST wysyłania zdarzeń urządzenia w usłudze IoT Hub, aby wysyłać dane telemetryczne do urządzenia.

Użyj następującego polecenia curl:

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

Gdzie:

  • -X POST polecenie curl informuje, że jest to polecenie HTTP POST. Wymagane dla tego wywołania interfejsu API.

  • -H 'Content-Type: application/json' informuje usługę IoT Hub, że publikujemy zawartość JSON i musi mieć wartość "application/json".

  • -H 'Content-Encoding: utf-8' informuje usługę IoT Hub o kodowaniu używanym dla treści komunikatu. Ustaw odpowiednią wartość dla systemu operacyjnego/klienta; jednak zazwyczaj jest to utf-8.

  • -H 'Authorization: [sas_token]' informuje usługę IoT Hub o uwierzytelnienie przy użyciu tokenu SAS. Zastąp [sas_token] element tokenem wygenerowanym dla przypisanego centrum IoT.

  • -d '{"temperature": 30}'–d, parametr to "dane" lub treść komunikatu, który publikujemy. W tym artykule publikujemy pojedynczy punkt danych temperatury. Typ zawartości został określony jako application/json, więc dla tego żądania treść to JSON. Należy pamiętać, że w przypadku elementu curl jest on owinięty pojedynczym cudzysłowem; w przeciwnym razie należy ująć podwójne cudzysłowy w formacie JSON.

  • Ostatnim parametrem jest adres URL do opublikowania. W przypadku interfejsu API wysyłania zdarzeń urządzenia adres URL to: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Zastąp [assigned_iot_hub_name] ciąg nazwą centrum IoT, do którego przypisano urządzenie.

    • Zastąp [device_id] element identyfikatorem urządzenia, który został przypisany podczas rejestrowania urządzenia. W przypadku urządzeń aprowizowania za pośrednictwem grup rejestracji identyfikator urządzenia będzie identyfikatorem rejestracji. W przypadku rejestracji indywidualnych można opcjonalnie określić identyfikator urządzenia inny niż identyfikator rejestracji we wpisie rejestracji.

Na przykład w przypadku urządzenia z identyfikatorem my-symkey-device urządzenia wysyłającego punkt danych telemetrycznych do centrum IoT o nazwie 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

Pomyślne wywołanie będzie miało odpowiedź podobną do następującej:

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

Następne kroki