Come usare chiavi simmetriche su HTTPS senza un SDK
In questo articolo di procedura si eseguirà il provisioning di un dispositivo usando chiavi simmetriche su HTTPS senza usare azure IoT DPS SDK per dispositivi. La maggior parte dei linguaggi fornisce librerie per inviare richieste HTTP, ma, invece di concentrarsi su un linguaggio specifico, in questo articolo si userà lo strumento da riga di comando cURL per inviare e ricevere tramite HTTPS.
È possibile seguire la procedura descritta in questo articolo in un computer Linux o Windows. Se si esegue in sottosistema Windows per Linux (WSL) o in esecuzione in un computer Linux, è possibile immettere tutti i comandi nel sistema locale in un prompt di Bash. Se si esegue in Windows, immettere tutti i comandi nel sistema locale in un prompt di GitBash.
Esistono percorsi diversi in questo articolo a seconda del tipo di voce di registrazione che si sceglie di usare. Dopo aver installato i prerequisiti, assicurarsi di leggere la panoramica prima di procedere.
Prerequisiti
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Completare la procedura descritta in Configurare il servizio Device Provisioning in hub IoT con il portale di Azure.
Assicurarsi che Python 3.7 o versione successiva sia installato nel computer. Per controllare la versione di Python, eseguire
python --version
.Se si esegue in Windows, installare la versione più recente di Git. Verificare che Git venga aggiunto alle variabili di ambiente accessibili alla finestra di comando. Vedere gli strumenti client Git di Software Freedom Conservancy per la versione più recente degli strumenti
git
da installare, tra cui Git Bash, l'app da riga di comando che è possibile usare per interagire con il repository Git locale. In Windows immettere tutti i comandi nel sistema locale in un prompt di GitBash.Interfaccia della riga di comando di Azure. In questo articolo sono disponibili due opzioni per l'esecuzione dei comandi dell'interfaccia della riga di comando di Azure:
- Usare Azure Cloud Shell, una shell interattiva che esegue i comandi dell'interfaccia della riga di comando nel browser. Questa opzione è consigliata perché non è necessario installare nulla. Se si usa Cloud Shell per la prima volta, accedere al portale di Azure. Seguire la procedura descritta in Avvio rapido di Cloud Shell per Avviare Cloud Shell e selezionare l'ambiente Bash.
- Facoltativamente, eseguire l'interfaccia della riga di comando di Azure nel computer locale. Se l'interfaccia della riga di comando di Azure è già installata, eseguire
az upgrade
per aggiornare l'interfaccia della riga di comando e le estensioni alla versione corrente. Per installare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.
Se si esegue in un ambiente Linux o WSL, aprire un prompt di Bash per eseguire i comandi in locale. Se si esegue in un ambiente Windows, aprire un prompt di GitBash.
Panoramica
Per questo articolo, è possibile usare una registrazione singola o un gruppo di registrazione per effettuare il provisioning tramite DPS.
Per una registrazione singola, completare Use individual enrollment (Usa registrazione singola).
Per un gruppo di registrazione, completare Usare un gruppo di registrazione.
Dopo aver creato la voce del singolo gruppo di registrazione o registrazione, continuare a creare un token di firma di accesso condiviso e registrare il dispositivo con DPS.
Usare una registrazione singola
Per creare una nuova registrazione singola da usare per questo articolo, è possibile usare il comando az iot dps enrollment create per creare una registrazione singola per l'attestazione con chiave simmetrica.
Il comando seguente crea una voce di registrazione con i criteri di allocazione predefiniti per l'istanza del servizio Device Provisioning e consente al servizio Device Provisioning di assegnare le chiavi primarie e secondarie per il dispositivo:
az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
Sostituire il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning.
L'ID registrazione è l'ID di registrazione per il dispositivo. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali:
'-'
,'.'
,'_'
,':'
. L'ultimo carattere deve essere alfanumerico o un trattino ('-'
). Assicurarsi che l'ID di registrazione usato nel comando sia conforme a questo formato.
Le chiavi simmetriche assegnate vengono restituite nella proprietà di attestazione nella risposta:
{
"allocationPolicy": null,
"attestation": {
"symmetricKey": {
"primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
"secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
},
"tpm": null,
"type": "symmetricKey",
"x509": null
},
...
}
Prendere nota della chiave primaria e dell'ID di registrazione (ID registrazione) per la voce di registrazione singola, che verranno usati più avanti in questo articolo.
Se si vuole usare una registrazione singola esistente per questo articolo, è possibile ottenere la chiave primaria con il comando 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
Usare un gruppo di registrazione
Se si vuole creare un nuovo gruppo di registrazione da usare per questo articolo, è possibile usare il comando az iot dps enrollment-group create per creare un gruppo di registrazione per l'attestazione con chiave simmetrica.
Il comando seguente crea una voce del gruppo di registrazione con i criteri di allocazione predefiniti per l'istanza del servizio Device Provisioning e consente al servizio Device Provisioning di assegnare le chiavi primarie e secondarie per il gruppo di registrazione:
az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
Sostituire il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning.
L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali:
'-'
,'.'
,'_'
,':'
. L'ultimo carattere deve essere alfanumerico o un trattino ('-'
). Può essere qualsiasi nome che si sceglie di usare per il gruppo di registrazione.
Le chiavi simmetriche assegnate vengono restituite nella proprietà di attestazione nella risposta:
{
"allocationPolicy": null,
"attestation": {
"symmetricKey": {
"primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
"secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
},
"tpm": null,
"type": "symmetricKey",
"x509": null
},
...
}
Prendere nota della chiave primaria.
Se si vuole usare una registrazione singola esistente per questo articolo, è possibile ottenere la chiave primaria con il comando 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
Derivare una chiave di dispositivo
Quando si usa l'attestazione con chiave simmetrica con le registrazioni di gruppo, non si usano direttamente le chiavi dei gruppi di registrazione. Si deriva invece una chiave univoca per ogni dispositivo dalla chiave del gruppo di registrazione. Per altre informazioni, vedere Registrazioni di gruppo con chiavi simmetriche.
In questa sezione si genererà una chiave del dispositivo dalla chiave primaria del gruppo di registrazione per calcolare un HMAC-SHA256 dell'ID di registrazione univoco per il dispositivo. Il risultato verrà quindi convertito in formato Base64.
Generare la chiave univoca usando openssl. Si userà lo script della shell Bash seguente. Sostituire
{primary-key}
con la chiave primaria del gruppo di registrazione copiata in precedenza e sostituire{contoso-simdevice}
con l'ID di registrazione che si vuole usare per il dispositivo. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali:'-'
,'.'
,'_'
,':'
. L'ultimo carattere deve essere alfanumerico o un trattino ('-'
).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
Lo script restituirà un output simile alla chiave seguente:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Prendere nota della chiave del dispositivo derivata e dell'ID di registrazione usato per generarlo, che verranno usati nella sezione successiva.
È anche possibile usare l'interfaccia della riga di comando di Azure o PowerShell per derivare una chiave del dispositivo. Per altre informazioni, vedere Derivare una chiave del dispositivo.
Creare un token di firma di accesso condiviso
Quando si usa l'attestazione con chiave simmetrica, i dispositivi eseguono l'autenticazione con DPS usando un token sas (Shared Access Signature). Per i dispositivi di cui viene effettuato il provisioning tramite una registrazione singola, il token viene firmato usando la chiave primaria o secondaria impostata nella voce di registrazione. Per il provisioning di un dispositivo tramite un gruppo di registrazione, il token viene firmato usando una chiave del dispositivo derivata, che a sua volta è stata generata usando la chiave primaria o secondaria impostata nella voce del gruppo di registrazione. Il token specifica un'ora di scadenza e un URI della risorsa di destinazione.
Lo script Python seguente può essere usato per generare un token di firma di accesso condiviso:
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))
Dove:
[resource_uri]
è l'URI della risorsa a cui si sta tentando di accedere con questo token. Per dps, è nel formato[dps_id_scope]/registrations/[dps_registration_id]
, dove[dps_id_scope]
è l'ambito ID dell'istanza del servizio Device Provisioning e[dps_registration_id]
è l'ID di registrazione usato per il dispositivo.È possibile ottenere l'ambito ID per l'istanza del servizio Device Provisioning dal riquadro Panoramica dell'istanza in portale di Azure oppure usare il comando az iot dps show dell'interfaccia della riga di comando di Azure (sostituire i segnaposto con il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning):
az iot dps show -g {resource_group_name} --name {dps_name}
[device_key]
è la chiave del dispositivo associata al dispositivo. Questa chiave è quella specificata o generata automaticamente in una registrazione singola o una chiave derivata per una registrazione di gruppo.Se si usa una registrazione singola, usare la chiave primaria salvata in Usare una registrazione singola.
Se si usa un gruppo di registrazione, usare la chiave del dispositivo derivata generata in Usare un gruppo di registrazione.
[expiry_in_seconds]
è il periodo di validità di questo token di firma di accesso condiviso in secondi.[policy]
è il criterio a cui è associata la chiave del dispositivo. Per la registrazione del dispositivo DPS, il criterio è hardcoded per la "registrazione".
Un esempio di set di input per un dispositivo chiamato my-symkey-device
con un periodo di validità di 30 giorni potrebbe essere simile al seguente.
uri = '0ne00111111/registrations/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 2592000
policy='registration'
Modificare lo script per il dispositivo e l'istanza dps e salvarlo come file Python; ad esempio generate_token.py. Eseguire lo script, python generate_token.py
ad esempio . Dovrebbe restituire un token di firma di accesso condiviso simile al seguente:
0ne00111111%2Fregistrations%2Fmy-symkey-device
1663952627
SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration
Copiare e salvare l'intera riga che inizia con SharedAccessSignature
. Questa riga è il token di firma di accesso condiviso. Sarà necessario nelle sezioni seguenti.
Per altre informazioni sull'uso di token di firma di accesso condiviso con DPS e la relativa struttura, vedere Controllare l'accesso al servizio Device Provisioning con firma di accesso condiviso.
Registrare il dispositivo
Chiamare l'API REST Registra dispositivo per effettuare il provisioning del dispositivo tramite DPS.
Usare il comando curl seguente:
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
Dove:
-L
indica a curl di seguire i reindirizzamenti HTTP.–i
indica a curl di includere le intestazioni del protocollo nell'output. Queste intestazioni non sono strettamente necessarie, ma possono essere utili.-X PUT
indica a curl che si tratta di un comando HTTP PUT. Obbligatorio per questa chiamata API.-H 'Content-Type: application/json'
indica che il servizio Device Provisioning sta pubblicando contenuto JSON e deve essere "application/json".-H 'Content-Encoding: utf-8'
indica al servizio Device Provisioning la codifica usata per il corpo del messaggio. Impostare sul valore appropriato per il sistema operativo/client; tuttavia, è in genereutf-8
.-H 'Authorization: [sas_token]'
indica al servizio Device Provisioning di eseguire l'autenticazione usando il token di firma di accesso condiviso. Sostituire [sas_token] con il token generato in Creare un token di firma di accesso condiviso.-d '{"registrationId": "[registration_id]"}'
, il–d
parametro è il corpo o i dati del messaggio che si sta pubblicando. Deve essere JSON, sotto forma di '{"registrationId":"[registration_id"}'. Si noti che per curl, viene racchiuso tra virgolette singole; in caso contrario, è necessario eseguire l'escape delle virgolette doppie nel codice JSON.Infine, l'ultimo parametro è l'URL a cui inviare il post. Per il servizio Device Provisioning "regolare", ad esempio in locale, viene usato l'endpoint dps globale, global.azure-devices-provisioning.net, :
https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31
. Si noti che è necessario sostituire[dps_scope_id]
e[registration_id]
con i valori appropriati.
Ad esempio:
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
Una chiamata con esito positivo avrà una risposta simile alla seguente:
HTTP/1.1 202 Accepted
Date: Wed, 31 Aug 2022 22:02:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/register
Retry-After: 3
x-ms-request-id: a021814f-0cf6-4ce9-a1e9-ead7eb5118d9
Strict-Transport-Security: max-age=31536000; includeSubDomains
{"operationId":"5.316aac5bdc130deb.b1e02da8-c3a0-4ff2-a121-7ea7a6b7f550","status":"assigning"}
La risposta contiene un ID operazione e uno stato. In questo caso, lo stato è impostato su assigning
. La registrazione dps è, potenzialmente, un'operazione a esecuzione prolungata, quindi viene eseguita in modo asincrono. In genere, si eseguirà il polling dello stato usando l'API REST Ricerca stato operazione per determinare quando il dispositivo è stato assegnato o se si è verificato un errore.
I valori di stato validi per DPS sono:
assigned
: il valore restituito dalla chiamata di stato indicherà a quale hub IoT il dispositivo è stato assegnato.assigning
: l'operazione è ancora in esecuzione.disabled
: il record di registrazione è disabilitato in DPS, quindi il dispositivo non può essere assegnato.failed
: l'assegnazione non è riuscita. Nella risposta sarà presente un oggettoerrorCode
eerrorMessage
restituito in unregistrationState
record per indicare l'errore.unassigned
Per chiamare l'API Ricerca stato operazione, usare il comando curl seguente:
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
Si userà lo stesso ambito ID, l'ID registrazione e il token di firma di accesso condiviso come è stato fatto nella richiesta Registra dispositivo . Usare l'ID operazione restituito nella risposta Registra dispositivo .
Ad esempio:
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
L'output seguente mostra la risposta per un dispositivo assegnato correttamente. Si noti che la status
proprietà è assigned
e che la registrationState.assignedHub
proprietà è impostata sull'hub IoT in cui è stato effettuato il provisioning del dispositivo.
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="
}
}
Inviare un messaggio di telemetria
Prima di poter inviare un messaggio di telemetria, è necessario creare un token di firma di accesso condiviso per l'hub IoT a cui è stato assegnato il dispositivo. Questo token viene firmato usando la stessa chiave primaria o la chiave del dispositivo derivata usata per firmare il token di firma di accesso condiviso per l'istanza del servizio Device Provisioning.
Creare un token di firma di accesso condiviso per l'hub IoT
Per creare il token di firma di accesso condiviso, è possibile eseguire lo stesso codice per creare il token per l'istanza del servizio Device Provisioning con le modifiche seguenti:
uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= None
Dove:
[resource_uri]
è l'URI della risorsa a cui si sta tentando di accedere con questo token. Per un dispositivo che invia messaggi a un hub IoT, è nel formato[iot-hub-host-name]/devices/[device-id]
.Per
[iot-hub-host-name]
usare il hub IoT nome host restituito nellaassignedHub
proprietà nella sezione precedente.Per
[device-id]
usare l'ID dispositivo restituito nelladeviceId
proprietà nella sezione precedente.
[device_key]
è la chiave del dispositivo associata al dispositivo. Questa chiave è quella specificata o generata automaticamente in una registrazione singola o una chiave derivata per una registrazione di gruppo. È la stessa chiave usata in precedenza per creare un token per DPS.Se si usa una registrazione singola, usare la chiave primaria salvata in Usare una registrazione singola.
Se si usa un gruppo di registrazione, usare la chiave del dispositivo derivata generata in Usare un gruppo di registrazione.
[expiry_in_seconds]
è il periodo di validità di questo token di firma di accesso condiviso in secondi.policy=None
Non sono necessari criteri per un dispositivo che invia dati di telemetria a un hub IoT, quindi questo parametro è impostato suNone
.
Un set di input di esempio per un dispositivo denominato my-symkey-device
invio a un hub IoT denominato MyExampleHub
con un periodo di validità del token di un'ora potrebbe essere simile al seguente:
uri = 'MyExampleHub.azure-devices.net/devices/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 3600
policy= None
L'output seguente mostra un token di firma di accesso condiviso di esempio per questi input:
SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026
Per altre informazioni sulla creazione di token di firma di accesso condiviso per hub IoT, incluso il codice di esempio in altri linguaggi di programmazione, vedere Controllare l'accesso alle hub IoT usando firme di accesso condiviso.
Nota
Per praticità, è possibile usare il comando az iot hub generate-sas-token dell'interfaccia della riga di comando di Azure per ottenere un token di firma di accesso condiviso per un dispositivo registrato con un hub IoT. Ad esempio, il comando seguente genera un token di firma di accesso condiviso con una durata di un'ora. {iothub_name}
Per , è necessaria solo la prima parte dell'hame host, ad esempio MyExampleHub
.
az iot hub generate-sas-token -d {device_id} -n {iothub_name}
Inviare dati all'hub IoT
Chiamare l'API REST invia evento dispositivo hub IoT per inviare dati di telemetria al dispositivo.
Usare il comando curl seguente:
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
Dove:
-X POST
indica a curl che si tratta di un comando HTTP POST. Obbligatorio per questa chiamata API.-H 'Content-Type: application/json'
indica hub IoT stiamo pubblicando contenuto JSON e deve essere "application/json".-H 'Content-Encoding: utf-8'
indica hub IoT la codifica usata per il corpo del messaggio. Impostare sul valore appropriato per il sistema operativo/client; tuttavia, è in genereutf-8
.-H 'Authorization: [sas_token]'
indica hub IoT di eseguire l'autenticazione usando il token di firma di accesso condiviso. Sostituire[sas_token]
con il token generato per l'hub IoT assegnato.-d '{"temperature": 30}'
, il–d
parametro è il corpo o i dati del messaggio che si sta pubblicando. Per questo articolo viene pubblicato un singolo punto dati relativo alla temperatura. Il tipo di contenuto è stato specificato come application/json, quindi, per questa richiesta, il corpo è JSON. Si noti che per curl, viene racchiuso tra virgolette singole; in caso contrario, è necessario eseguire l'escape delle virgolette doppie nel codice JSON.L'ultimo parametro è l'URL a cui inviare il post. Per l'API Di invio dell'evento del dispositivo, l'URL è:
https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13
.Sostituire
[assigned_iot_hub_name]
con il nome dell'hub IoT a cui è stato assegnato il dispositivo.Sostituire
[device_id]
con l'ID dispositivo assegnato al momento della registrazione del dispositivo. Per i dispositivi di cui viene effettuato il provisioning tramite i gruppi di registrazione, l'ID dispositivo sarà l'ID registrazione. Per le registrazioni individuali, è possibile, facoltativamente, specificare un ID dispositivo diverso dall'ID di registrazione nella voce di registrazione.
Ad esempio, per un dispositivo con UN ID dispositivo per l'invio di un punto dati di my-symkey-device
telemetria a un hub IoT denominato 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
Una chiamata con esito positivo avrà una risposta simile alla seguente:
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
Passaggi successivi
Per altre informazioni sull'attestazione della chiave simmetrica, vedere Attestazione di chiave simmetrica.
Per altre informazioni sui token di firma di accesso condiviso e sulla relativa struttura, vedere Controllare l'accesso al servizio Device Provisioning con firma di accesso condiviso.