Szimmetrikus kulcsok használata HTTPS-en keresztül SDK nélkül

Ebben az útmutatócikkben szimmetrikus kulcsokkal épít ki egy eszközt HTTPS-en keresztül, azure IoT DPS-eszköz SDK használata nélkül. A legtöbb nyelv http-kérések küldéséhez biztosít kódtárakat, de ahelyett, hogy egy adott nyelvre összpontosítanál, ebben a cikkben a cURL parancssori eszköz használatával küldhet és fogadhat HTTPS-en keresztül.

A cikkben leírt lépéseket linuxos vagy Windows rendszerű gépeken is követheti. Ha Linuxos Windows-alrendszer (WSL) vagy Linux rendszerű gépen fut, egy Bash-parancssorban megadhatja a helyi rendszer összes parancsát. Ha Windows rendszeren fut, írja be a helyi rendszer összes parancsát egy GitBash-parancssorba.

A cikk különböző elérési utakat mutat a használni kívánt regisztrációs bejegyzés típusától függően. Az előfeltételek telepítése után mindenképpen olvassa el az Áttekintést a folytatás előtt.

Előfeltételek

  • Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Hajtsa végre az IoT Hub Eszköz Felügyeleti Szolgáltatás beállításának lépéseit az Azure portálon.

  • Győződjön meg arról, hogy a Python 3.7 vagy újabb verziója telepítve van a számítógépen. A Python verzióját a futtatással python --versionellenőrizheti.

  • Ha Windows rendszeren fut, telepítse a Git legújabb verzióját. Győződjön meg arról, hogy a Git hozzá van adva a parancsablakhoz elérhető környezeti változókhoz. Tekintse meg a Software Freedom Conservancy Git-ügyféleszközeit a telepíteni kívánt eszközök legújabb verziójához git , amely tartalmazza a Git Basht, a helyi Git-adattárral való interakcióhoz használható parancssori alkalmazást. Windows rendszeren egy GitBash-parancssorban adja meg a helyi rendszer összes parancsát.

  • Azure parancssori felület (CLI). Ebben a cikkben két lehetősége van az Azure CLI-parancsok futtatására:

    • Használja az Azure Cloud Shellt, egy interaktív rendszerhéjat, amely CLI parancsokat futtat a böngészőben. Ez a beállítás azért ajánlott, mert nem kell semmit telepítenie. Ha először használja a Cloud Shellt, jelentkezzen be az Azure Portalra. Kövesse a Cloud Shell rövid útmutatójának lépéseit a Cloud Shell elindításához és a Bash-környezet kiválasztásához.
    • Igény szerint futtassa az Azure CLI-t a helyi gépen. Ha az Azure CLI már telepítve van, futtassa az upgrade a parancssori felület és a bővítmények frissítését az aktuális verzióra. Az Azure CLI telepítéséhez tekintse meg az Azure CLI telepítését ismertető témakört.
  • Ha Linux- vagy WSL-környezetben fut, nyisson meg egy Bash-kérést a parancsok helyi futtatásához. Ha Windows-környezetben fut, nyisson meg egy GitBash-parancssort.

Áttekintés

Ehhez a feladathoz használhat egyéni regisztrációt vagy regisztrációs csoportot a DPS-ben történő előkészítésre.

Miután létrehozta az egyéni regisztrációs vagy regisztrációs csoportbejegyzést, hozzon létre egy SAS-jogkivonatot, és a DPS-ben regisztrálja az eszközt.

Egyéni regisztráció használata

Ha új egyéni regisztrációt szeretne létrehozni ehhez a cikkhez, az az iot dps enrollment create paranccsal létrehozhat egy egyéni regisztrációt a szimmetrikus kulcsigazoláshoz.

Az alábbi parancs létrehoz egy regisztrációs bejegyzést a DPS-példány alapértelmezett foglalási szabályzatával, és lehetővé teszi a DPS számára az eszköz elsődleges és másodlagos kulcsainak hozzárendelését:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Cserélje le az erőforráscsoport és a DPS-példány nevét.

  • A regisztrációs azonosító az eszköz regisztrációs azonosítója. A regisztrációs azonosító egy kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből és a speciális karakterekből: '-', '.', '_'. ':' Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-') kell lennie. Győződjön meg arról, hogy a parancsban használt regisztrációs azonosító megfelel ennek a formátumnak.

A hozzárendelt szimmetrikus kulcsokat a rendszer a válasz igazolási tulajdonságában adja vissza:


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

  ...

}

Jegyezze fel az egyéni regisztrációs bejegyzés elsődleges kulcsát és regisztrációs azonosítóját (regisztrációs azonosítóját), amelyet a cikk későbbi részében fog használni.

Ha meglévő egyéni regisztrációt szeretne használni ehhez a cikkhez, az elsődleges kulcsot az az iot dps enrollment show paranccsal szerezheti be :

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

Regisztrációs csoport használata

Ha új regisztrációs csoportot szeretne létrehozni ehhez a cikkhez, az az iot dps enrollment-group create paranccsal létrehozhat egy regisztrációs csoportot a szimmetrikus kulcsigazoláshoz.

A következő parancs létrehoz egy regisztrációscsoport-bejegyzést a DPS-példány alapértelmezett foglalási szabályzatával, és lehetővé teszi a DPS számára a regisztrációs csoport elsődleges és másodlagos kulcsainak hozzárendelését:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Cserélje le az erőforráscsoport és a DPS-példány nevét.

  • A regisztrációs azonosító egy kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből és a speciális karakterekből: '-', '.', '_', ':'. Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-') kell lennie. Bármilyen nevet megadhat, amelyet a regisztrációs csoporthoz használ.

A hozzárendelt szimmetrikus kulcsokat a rendszer a válasz igazolási tulajdonságában adja vissza:


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

  ...

}

Jegyezze fel az elsődleges kulcsot.

Ha meglévő egyéni regisztrációt szeretne használni ehhez a cikkhez, az elsődleges kulcsot az az iot dps enrollment-group show paranccsal szerezheti be :

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

Eszközkulcs származtatása

Ha szimmetrikus kulcsigazolást használ csoportregisztrációkkal, nem használja közvetlenül a regisztrációs csoportkulcsokat. Ehelyett minden eszközhöz egy egyedi kulcsot a regisztrációs csoportkulcsból származtat. További információ: Csoportos regisztráció szimmetrikus kulcsokkal.

Ebben a szakaszban egy eszközkulcsot hoz létre a regisztrációs csoport elsődleges kulcsából az eszköz egyedi regisztrációs azonosítójának HMAC-SHA256 kiszámításához. Az eredmény ezután Base64 formátumba lesz konvertálva.

  1. Hozza létre az egyedi kulcsot az openssl használatával. A következő Bash shell szkriptet használja. Cserélje le a {primary-key}-t a regisztrációs csoport korábban másolt elsődleges kulcsára, és a {contoso-simdevice}-t az eszközhöz használni kívánt regisztrációs azonosítóra. A regisztrációs azonosító egy kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből és a speciális karakterekből: '-', '.', '_'. ':' Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-') kell lennie.

    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. A szkript a következő kulcshoz hasonló kimenetet ad ki:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Jegyezze fel a származtatott eszközkulcsot és a létrehozásához használt regisztrációs azonosítót, a következő szakaszban fogja használni őket.

Az Azure CLI-vel vagy a PowerShell-lel is levezetheti az eszközkulcsot. További információ: Eszközkulcs származtatása.

SAS-jogkivonat létrehozása

Szimmetrikus kulcsigazolás használatakor az eszközök közös hozzáférésű jogosultságkód (SAS) jogkivonat használatával hitelesítik a DPS-t. Az egyéni regisztráción keresztül létesített eszközök esetében a jogkivonat a regisztrációs bejegyzésben megadott elsődleges vagy másodlagos kulcskészlettel van aláírva. Egy eszközkiépítéshez regisztrációs csoporton keresztül a token egy származtatott eszközkulcs használatával aláírásra kerül, amely a regisztrációs csoport bejegyzésében beállított elsődleges vagy másodlagos kulcs használatával jön létre. A jogkivonat megad egy lejárati időt és egy célerőforrás URI-ját.

Sas-jogkivonat létrehozásához a következő Python-szkript használható:

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

Ahol:

  • [resource_uri] A jogkivonattal elérni kívánt erőforrás URI-ja. A DPS esetében ez a formátuma [dps_id_scope]/registrations/[dps_registration_id], ahol [dps_id_scope] a DPS példány azonosítójának hatóköre található, és [dps_registration_id] az eszköz regisztrációs azonosítója, amit használt.

    A DPS-példány azonosítójának hatókörét lekérheti a példány Áttekintés paneljén az Azure Portalon, vagy használhatja az iot dps show Azure CLI parancsot (cserélje le a helyőrzőket az erőforráscsoport és a DPS-példány nevére):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] az eszközhöz társított eszközkulcs. Ez a kulcs vagy az egyéni regisztrációban megadott vagy automatikusan létrehozott kulcs, vagy egy csoportregisztráció származtatott kulcsa.

    • Ha egyéni regisztrációt használ, használja az egyéni regisztrációban mentett elsődleges kulcsot.

    • Ha regisztrációs csoportot használ, használja a származtatott eszközkulcsot, amelyet a Regisztrációs csoport használata alatt generált.

  • [expiry_in_seconds] az SAS-jogkivonat érvényességi ideje másodpercben.

  • [policy] az a szabályzat, amelyhez az eszközkulcs társítva van. A DPS eszköz regisztráció esetében a politika "regisztrációra" van rögzítve.

Egy 30 napos érvényességi időtartamú eszköz my-symkey-device bemeneteinek példakészlete így nézhet ki.

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

Módosítsa az eszköz és a DPS-példány parancsfájlját, és mentse Python-fájlként; például generate_token.py. Futtassa például a szkriptet python generate_token.py. A következő példához hasonló SAS-jogkivonatot kell kihoznia:

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

Másolja és mentse a teljes sort, amely a következővel SharedAccessSignaturekezdődik: . Itt van az SAS-jogkivonat. A következő szakaszokban szüksége lesz rá.

Az SAS-jogkivonatok DPS-sel és azok szerkezetével való használatáról további információt az Azure IoT Hub Device Provisioning Service (DPS) hozzáférésének vezérlése megosztott hozzáférésű jogosultságkódokkal és biztonsági jogkivonatokkal című témakörben talál.

Eszköz regisztrálása

Meghívja az Eszközregisztrációs REST API-t az eszköz DPS-ben való üzembe helyezéséhez.

Használja a következő curl parancsot:

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

Ahol:

  • -L utasítja a curl alkalmazást, hogy kövesse a HTTP-átirányításokat.

  • –i utasítja a curl-t, hogy a kimenetben protokollfejlécek szerepeljenek. Ezek a fejlécek nem feltétlenül szükségesek, de hasznosak lehetnek.

  • -X PUT a curl azt jelzi, hogy ez a parancs HTTP PUT parancs. Ehhez az API-híváshoz szükséges.

  • -H 'Content-Type: application/json' azt jelzi a DPS-nek, hogy JSON-tartalmat teszünk közzé, és "alkalmazásnak/jsonnak" kell lennie.

  • -H 'Content-Encoding: utf-8' jelzi a DPS-nek az üzenet törzséhez használt kódolást. Állítsa be az operációs rendszer/ügyfél megfelelő értékére; általában utf-8.

  • -H 'Authorization: [sas_token]' a DPS-t arra utasítja, hogy hitelesítse az SAS-jogkivonattal. Cserélje le a [sas_token] elemet az SAS-jogkivonat létrehozása során generált jogkivonatra.

  • -d '{"registrationId": "[registration_id]"}', a –d paraméter a közzétett üzenet "adata" vagy törzse. JSON-nak kell lennie, "{"registrationId":"[registration_id"}" formában. A curl esetében egyetlen idézőjelbe van csomagolva; más esetekben a JSON-ban szereplő dupla idézőjeleket el kell kerülni.

  • Végül az utolsó paraméter a közzéteendő URL-cím. A "normál" (azaz nem helyszíni) DPS esetében a globális DPS-végpontot ( global.azure-devices-provisioning.net) használja a rendszer: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Ki kell cserélnie a [dps_scope_id] és [registration_id] elemeket a megfelelő értékekre.

Példa:

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

A sikeres hívás a következő példához hasonló választ ad:

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

A válasz egy műveletazonosítót és egy állapotot tartalmaz. Ebben az esetben az állapot a következőre assigningvan állítva: . A DPS-regisztráció valószínűleg egy hosszú ideig futó művelet, ezért aszinkron módon történik. Az állapotot általában az Operation Status Lookup REST API használatával kérdezi le annak megállapításához, hogy mikor van hozzárendelve az eszköz, vagy hogy hiba történik-e.

A DPS érvényes állapotértékei a következők:

  • assigned: az állapothívás visszatérési értéke azt jelzi, hogy az eszköz melyik IoT Hubhoz lett hozzárendelve.

  • assigning: a művelet továbbra is fut.

  • disabled: a regisztrációs rekord le van tiltva a DPS-ben, így az eszköz nem rendelhető hozzá.

  • failed: a hozzárendelés nem sikerült. Egy errorCode és errorMessage van visszaadva a válasz registrationState rekordjában, hogy jelezze a hibát.

  • unassigned

Az Operation Status Lookup API meghívásához használja a következő curl parancsot:

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

Ugyanazt az azonosító hatókört, regisztrációs azonosítót és SAS-jogkivonatot használja, mint az Eszköz regisztrálása kérésben. Használja az eszközregisztrálási válaszban visszaadott műveletazonosítót.

Példa:

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

Az alábbi kimenet egy sikeresen hozzárendelt eszköz válaszát jeleníti meg. Figyelje meg, hogy a status tulajdonság az assigned , és hogy a registrationState.assignedHub tulajdonság az IoT Hubra van állítva, ahol az eszköz ki lett építve.

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

Telemetriai üzenet küldése

Mielőtt telemetriai üzenetet küldhet, létre kell hoznia egy SAS-jogkivonatot ahhoz az IoT Hubhoz, amelyhez az eszközt hozzárendelték. Ezt a jogkivonatot ugyanazzal az elsődleges kulccsal vagy származtatott eszközkulccsal írja alá, mint a DPS-példány SAS-tokenjének aláírásához.

SAS-jogkivonat létrehozása az IoT Hubhoz

Az SAS-jogkivonat létrehozásához ugyanazt a kódot futtathatja, mint a DPS-példány jogkivonatának létrehozásához a következő módosításokkal:

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

Ahol:

  • [resource_uri] A jogkivonattal elérni kívánt erőforrás URI-ja. Az IoT Hubnak üzeneteket küldő eszköz esetében a formátuma [iot-hub-host-name]/devices/[device-id].

    • Az [iot-hub-host-name] esetében használja az előző szakaszban a assignedHub tulajdonságban visszaadott IoT Hub hosztnevet.

    • Az [device-id] esetében használja az előző szakaszban a deviceId tulajdonságban visszaadott eszközazonosítót.

  • [device_key] az eszközhöz társított eszközkulcs. Ez a kulcs vagy az egyéni regisztrációban megadott vagy automatikusan létrehozott kulcs, vagy egy csoportregisztráció származtatott kulcsa. (Ugyanaz a kulcs, amelyet korábban használt a DPS-jogkivonat létrehozásához.)

    • Ha egyéni regisztrációt használ, használja az egyéni regisztrációban mentett elsődleges kulcsot.

    • Ha regisztrációs csoportot használ, használja a származtatott eszközkulcsot, amelyet a Regisztrációs csoport használata alatt generált.

  • [expiry_in_seconds] az SAS-jogkivonat érvényességi ideje másodpercben.

  • policy=None Nincs szükség szabályzatra ahhoz, hogy egy eszköz telemetriát küldjön egy IoT Hubnak, ezért ez a paraméter a következőre Nonevan állítva: .

Egy egy egyórás jogkivonat-érvényességi időtartammal rendelkező my-symkey-device IoT Hubra küldött eszköz MyExampleHub bemeneteinek példakészlete a következőképpen nézhet ki:

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

Az alábbi kimenet egy SAS-mintajogkivonatot jelenít meg ezekhez a bemenetekhez:

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

Ha többet szeretne megtudni az SAS-jogkivonatok IoT Hubhoz való létrehozásáról, beleértve a más programozási nyelvek példakódját is, olvassa el az IoT Hubhoz való hozzáférés vezérlése megosztott hozzáférésű jogosultságkódok használatával című témakört.

Megjegyzés

Kényelmesen használhatja az Azure CLI az iot hub generate-sas-token parancsát egy SAS-jogkivonat lekéréséhez egy IoT Hubon regisztrált eszközhöz. Az alábbi parancs például egy egyórás SAS token-t hoz létre. {iothub_name}, Ehhez csak a gazdagép nevének első részére van szükség, például MyExampleHub.

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

Adatok küldése az IoT Hubra

Meghívja az IoT Hub Send Device Event REST API-t, hogy telemetriát küldjön az eszközre.

Használja a következő curl parancsot:

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

Ahol:

  • -X POST a curl azt jelzi, hogy ez a parancs egy HTTP POST parancs. Ehhez az API-híváshoz szükséges.

  • -H 'Content-Type: application/json' azt jelzi az IoT Hubnak, hogy JSON-tartalmat teszünk közzé, és "alkalmazásnak/jsonnak" kell lennie.

  • -H 'Content-Encoding: utf-8' jelzi az IoT Hubnak az üzenet törzséhez használt kódolást. Állítsa be az operációs rendszer/ügyfél megfelelő értékére; általában utf-8.

  • -H 'Authorization: [sas_token]' utasítja az IoT Hubot, hogy használja az SAS-jogkivonatot a hitelesítéshez. Cserélje le [sas_token] a hozzárendelt IoT Hubhoz létrehozott tokennel.

  • -d '{"temperature": 30}', a –d paraméter a közzétett üzenet "adata" vagy törzse. Ebben a cikkben egyetlen hőmérsékleti adatpontot teszünk közzé. A tartalomtípus alkalmazásként/jsonként lett megadva, ezért ebben a kérésben a törzs JSON. A curl esetében egyetlen idézőjelbe van csomagolva; más esetekben a JSON-ban szereplő dupla idézőjeleket el kell kerülni.

  • Az utolsó paraméter a közzéteendő URL-cím. A Send Device Event API esetében az URL-cím a következő. https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

    • Cserélje le [assigned_iot_hub_name] annak az IoT Hubnak a nevét, amelyhez az eszköz hozzá lett rendelve.

    • Cserélje le [device_id] az eszköz regisztrálásakor hozzárendelt eszközazonosítóra. A regisztrációs csoportokon keresztül kiépített eszközök esetében az eszközazonosító a regisztrációs azonosító. Egyéni regisztrációk esetén megadhat egy olyan eszközazonosítót, amely eltér a regisztrációs bejegyzésben szereplő regisztrációs azonosítótól.

Például egy olyan eszköz esetében, amelynek eszközazonosítója my-symkey-device telemetriai adatpontot küld egy IoT Hubnak: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

A sikeres hívások válasza az alábbi példához hasonló:

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

Következő lépések