Share via


Como usar chaves simétricas sobre HTTPS sem um SDK

Neste artigo de instruções, você provisionará um dispositivo usando chaves simétricas por HTTPS sem usar um SDK de dispositivo do Azure IoT DPS. A maioria dos idiomas fornece bibliotecas para enviar solicitações HTTP, mas, em vez de se concentrar em um idioma específico, neste artigo, você usará a ferramenta de linha de comando cURL para enviar e receber por HTTPS.

Você pode seguir as etapas neste artigo em uma máquina Linux ou Windows. Se você estiver executando no Windows Subsystem for Linux (WSL) ou em uma máquina Linux, poderá inserir todos os comandos em seu sistema local em um prompt Bash. Se você estiver executando no Windows, insira todos os comandos em seu sistema local em um prompt do GitBash.

Há diferentes caminhos através deste artigo, dependendo do tipo de entrada de inscrição que você escolher usar. Depois de instalar os pré-requisitos, leia a Visão geral antes de continuar.

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • Conclua as etapas em Configurar o Serviço de Provisionamento de Dispositivo do Hub IoT com o portal do Azure.

  • Certifique-se de que o Python 3.7 ou posterior está instalado na sua máquina. Você pode verificar sua versão do Python executando python --version.

  • Se você estiver executando no Windows, instale a versão mais recente do Git. Certifique-se de que o Git é adicionado às variáveis de ambiente acessíveis à janela de comando. Consulte as ferramentas de cliente Git da Software Freedom Conservancy para obter a versão mais recente das ferramentas a serem instaladas, que inclui o Git Bash, o aplicativo de linha de git comando que você pode usar para interagir com seu repositório Git local. No Windows, você inserirá todos os comandos em seu sistema local em um prompt do GitBash.

  • CLI do Azure. Você tem duas opções para executar comandos da CLI do Azure neste artigo:

    • Use o Azure Cloud Shell, um shell interativo que executa comandos da CLI em seu navegador. Essa opção é recomendada porque você não precisa instalar nada. Se você estiver usando o Cloud Shell pela primeira vez, entre no portal do Azure. Siga as etapas no início rápido do Cloud Shell para iniciar o Cloud Shell e selecionar o ambiente Bash.
    • Opcionalmente, execute a CLI do Azure em sua máquina local. Se a CLI do Azure já estiver instalada, execute az upgrade para atualizar a CLI e as extensões para a versão atual. Para instalar a CLI do Azure, consulte Instalar a CLI do Azure.
  • Se você estiver executando em um ambiente Linux ou WSL, abra um prompt Bash para executar comandos localmente. Se você estiver executando em um ambiente Windows, abra um prompt do GitBash.

Descrição geral

Para este artigo, você pode usar um registro individual ou um grupo de inscrição para provisionar por meio do DPS.

Depois de criar a inscrição individual ou a entrada do grupo de inscrição, continue a criar um token SAS e registre seu dispositivo no DPS.

Usar uma inscrição individual

Se quiser criar um novo registro individual para usar neste artigo, você pode usar o comando az iot dps enrollment create para criar um registro individual para atestado de chave simétrica.

O comando a seguir cria uma entrada de registro com a política de alocação padrão para sua instância DPS e permite que o DPS atribua as chaves primária e secundária para seu dispositivo:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Substitua o nome do grupo de recursos e da instância do DPS.

  • O ID de inscrição é o ID de registro do seu dispositivo. O ID de registo é uma cadeia de caracteres que não diferencia maiúsculas de minúsculas (até 128 caracteres) de carateres alfanuméricos mais os carateres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-'). Verifique se a ID de inscrição usada no comando está de acordo com esse formato.

As chaves simétricas atribuídas são retornadas na propriedade attestation na resposta:


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

  ...

}

Anote a chave primária e a ID de registro (ID de inscrição) para sua entrada de inscrição individual, você as usará mais adiante neste artigo.

Se você quiser usar um registro individual existente para este artigo, você pode obter a chave primária com o 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

Usar um grupo de inscrição

Se quiser criar um novo grupo de inscrição para usar neste artigo, você pode usar o comando az iot dps enrollment-group create para criar um grupo de registro para atestado de chave simétrica.

O comando a seguir cria uma entrada de grupo de registro com a política de alocação padrão para sua instância do DPS e permite que o DPS atribua as chaves primária e secundária para o grupo de registro:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Substitua o nome do grupo de recursos e da instância do DPS.

  • O ID de inscrição é uma cadeia de caracteres que não diferencia maiúsculas de minúsculas (até 128 caracteres) de caracteres alfanuméricos mais os caracteres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-'). Pode ser qualquer nome que você escolher usar para o grupo de inscrição.

As chaves simétricas atribuídas são retornadas na propriedade attestation na resposta:


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

  ...

}

Anote a chave primária.

Se quiser usar um registro individual existente para este artigo, você pode obter a chave primária com o 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

Derivar uma chave de dispositivo

Ao usar o atestado de chave simétrica com inscrições de grupo, você não usa as chaves de grupo de inscrição diretamente. Em vez disso, você deriva uma chave exclusiva para cada dispositivo da chave do grupo de registro. Para obter mais informações, consulte Inscrições de grupo com chaves simétricas.

Nesta seção, você gerará uma chave de dispositivo a partir da chave primária do grupo de registro para calcular um HMAC-SHA256 do ID de registro exclusivo do dispositivo. O resultado será então convertido no formato Base64.

  1. Gere sua chave exclusiva usando openssl. Você usará o seguinte shell script Bash. Substitua {primary-key} pela Chave Primária do grupo de inscrição que você copiou anteriormente e substitua {contoso-simdevice}pela ID de registro que deseja usar para o dispositivo. O ID de registo é uma cadeia de caracteres que não diferencia maiúsculas de minúsculas (até 128 caracteres) de carateres alfanuméricos mais os carateres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-').

    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. O script produzirá algo como a seguinte chave:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Anote a chave do dispositivo derivada e o ID de registro que você usou para gerá-la, você as usará na próxima seção.

Você também pode usar a CLI do Azure ou o PowerShell para derivar uma chave de dispositivo. Para saber mais, consulte Derivar uma chave de dispositivo.

Criar um token SAS

Ao usar o atestado de chave simétrica, os dispositivos são autenticados com DPS usando um token SAS (Assinatura de Acesso Compartilhado). Para o provisionamento de dispositivos por meio de um registro individual, o token é assinado usando a chave primária ou secundária definida na entrada de registro. Para um provisionamento de dispositivo por meio de um grupo de registro, o token é assinado usando uma chave de dispositivo derivada, que, por sua vez, foi gerada usando o conjunto de chaves primária ou secundária na entrada do grupo de registro. O token especifica um tempo de expiração e um URI de recurso de destino.

O seguinte script Python pode ser usado para gerar um token SAS:

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

Em que:

  • [resource_uri] é o URI do recurso que você está tentando acessar com esse token. Para DPS, é do formulário [dps_id_scope]/registrations/[dps_registration_id], onde [dps_id_scope] é o escopo de ID da sua instância DPS e [dps_registration_id] é o ID de registro que você usou para o seu dispositivo.

    Você pode obter o escopo de ID para sua instância do DPS no painel Visão geral da sua instância no portal do Azure ou pode usar o comando az iot dps show Azure CLI (substitua os espaços reservados pelo nome do seu grupo de recursos e instância do DPS):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] é a chave do dispositivo associada ao seu dispositivo. Essa chave é a especificada ou gerada automaticamente para você em um registro individual ou uma chave derivada para um registro de grupo.

    • Se você estiver usando um registro individual, use a chave primária salva em Usar um registro individual.

    • Se você estiver usando um grupo de registro, use a chave de dispositivo derivada gerada em Usar um grupo de registro.

  • [expiry_in_seconds] é o período de validade deste token SAS em segundos.

  • [policy] é a política à qual a chave do dispositivo está associada. Para o registro de dispositivo DPS, a política é codificada para 'registro'.

Um exemplo de conjunto de entradas para um dispositivo chamado my-symkey-device com um período de validade de 30 dias pode ter esta aparência.

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

Modifique o script para seu dispositivo e instância DPS e salve-o como um arquivo Python; por exemplo, generate_token.py. Execute o script, por exemplo, python generate_token.py. Ele deve gerar um token SAS semelhante ao seguinte:

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

Copie e salve toda a linha que começa com SharedAccessSignature. Esta linha é o token SAS. Você precisará dele nas seções a seguir.

Para saber mais sobre como usar tokens SAS com DPS e sua estrutura, consulte Controlar o acesso ao DPS com SAS.

Registar o seu dispositivo

Você chama a API REST do dispositivo de registro para provisionar seu dispositivo por meio do DPS.

Use o seguinte comando 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

Em que:

  • -L diz ao curl para seguir redirecionamentos HTTP.

  • –i Diz ao curl para incluir cabeçalhos de protocolo na saída. Esses cabeçalhos não são estritamente necessários, mas podem ser úteis.

  • -X PUT informa curl que este é um comando HTTP PUT. Necessário para esta chamada de API.

  • -H 'Content-Type: application/json' informa ao DPS que estamos postando conteúdo JSON e deve ser 'application/json'.

  • -H 'Content-Encoding: utf-8' informa ao DPS a codificação que estamos usando para o corpo da mensagem. Defina o valor adequado para o seu SO/cliente; no entanto, é geralmente utf-8.

  • -H 'Authorization: [sas_token]' diz ao DPS para autenticar usando seu token SAS. Substitua [sas_token] pelo token gerado em Criar um token SAS.

  • -d '{"registrationId": "[registration_id]"}', o –d parâmetro é o 'dados' ou o corpo da mensagem que estamos publicando. Deve ser JSON, na forma de '{"registrationId":"[registration_id"}'. Note que, para a ondulação, ela é embrulhada em aspas simples; caso contrário, você precisa escapar das aspas duplas no JSON.

  • Finalmente, o último parâmetro é o URL para postar. Para DPS "regular" (ou seja, não local), o ponto de extremidade DPS global, global.azure-devices-provisioning.net, é usado: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Observe que você tem que substituir [dps_scope_id] e [registration_id] com os valores apropriados.

Por exemplo:

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

Uma chamada bem-sucedida terá uma resposta semelhante à seguinte:

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 resposta contém um ID de operação e um status. Nesse caso, o status é definido como assigning. O registro do DPS é, potencialmente, uma operação de longa duração, por isso é feito de forma assíncrona. Normalmente, você pesquisará o status usando a API REST de Pesquisa de Status da Operação para determinar quando seu dispositivo foi atribuído ou se ocorreu uma falha.

Os valores de status válidos para DPS são:

  • assigned: o valor de retorno da chamada de status indicará a qual Hub IoT o dispositivo foi atribuído.

  • assigning: a operação ainda está em execução.

  • disabled: o registro de registro está desativado no DPS, portanto, o dispositivo não pode ser atribuído.

  • failed: a atribuição falhou. Haverá um errorCode e errorMessage devolvido em um registrationState registro na resposta para indicar o que falhou.

  • unassigned

Para chamar a API de Pesquisa de Status da Operação , use o seguinte comando 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

Você usará o mesmo escopo de ID, ID de registro e token SAS que usou na solicitação Registrar dispositivo . Use o ID da operação que foi retornado na resposta Registrar dispositivo .

Por exemplo:

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

A saída a seguir mostra a resposta para um dispositivo que foi atribuído com êxito. Observe que a status propriedade é assigned e que a registrationState.assignedHub propriedade está definida para o hub IoT onde o dispositivo foi provisionado.

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

Enviar uma mensagem de telemetria

Antes de enviar uma mensagem de telemetria, você precisa criar um token SAS para o hub IoT ao qual o dispositivo foi atribuído. Você assina esse token usando a mesma chave primária ou chave de dispositivo derivada que usou para assinar o token SAS para sua instância DPS.

Criar um token SAS para seu hub IoT

Para criar o token SAS, você pode executar o mesmo código que fez para criar o token para sua instância DPS com as seguintes alterações:

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

Em que:

  • [resource_uri] é o URI do recurso que você está tentando acessar com esse token. Para um dispositivo que envia mensagens para um hub IoT, ele tem o formato [iot-hub-host-name]/devices/[device-id].

    • Para [iot-hub-host-name], use o nome de host do Hub IoT retornado na assignedHub propriedade na seção anterior.

    • Para [device-id], use a ID do dispositivo retornada deviceId na propriedade na seção anterior.

  • [device_key] é a chave do dispositivo associada ao seu dispositivo. Essa chave é a especificada ou gerada automaticamente para você em um registro individual ou uma chave derivada para um registro de grupo. (É a mesma chave que você usou anteriormente para criar um token para DPS.)

    • Se você estiver usando um registro individual, use a chave primária salva em Usar um registro individual.

    • Se você estiver usando um grupo de registro, use a chave de dispositivo derivada gerada em Usar um grupo de registro.

  • [expiry_in_seconds] é o período de validade deste token SAS em segundos.

  • policy=None Nenhuma política é necessária para um dispositivo que envia telemetria para um hub IoT, portanto, esse parâmetro é definido como None.

Um exemplo de conjunto de entradas para um dispositivo chamado my-symkey-device envio para um Hub IoT nomeado MyExampleHub com um período de validade de token de uma hora pode ter esta aparência:

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

A saída a seguir mostra um token SAS de exemplo para essas entradas:

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

Para saber mais sobre como criar tokens SAS para o Hub IoT, incluindo código de exemplo em outras linguagens de programação, consulte Controlar o acesso ao Hub IoT usando assinaturas de acesso compartilhado.

Nota

Como conveniência, você pode usar o comando azur CLI az iot hub generate-sas-token para obter um token SAS para um dispositivo registrado com um hub IoT. Por exemplo, o comando a seguir gera um token SAS com duração de uma hora. Para o {iothub_name}, você só precisa da primeira parte do hame anfitrião, por exemplo, MyExampleHub.

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

Enviar dados para o seu hub IoT

Você chama a API REST de Evento de Envio de Dispositivo do Hub IoT para enviar telemetria para o dispositivo.

Use o seguinte comando 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

Em que:

  • -X POST informa curl que este é um comando HTTP POST. Necessário para esta chamada de API.

  • -H 'Content-Type: application/json' informa ao Hub IoT que estamos postando conteúdo JSON e deve ser 'application/json'.

  • -H 'Content-Encoding: utf-8' informa ao Hub IoT a codificação que estamos usando para o corpo da mensagem. Defina o valor adequado para o seu SO/cliente; no entanto, é geralmente utf-8.

  • -H 'Authorization: [sas_token]' informa ao Hub IoT para autenticar usando seu token SAS. Substitua [sas_token] pelo token gerado para o hub IoT atribuído.

  • -d '{"temperature": 30}', o –d parâmetro é o 'dados' ou o corpo da mensagem que estamos publicando. Para este artigo, estamos postando um único ponto de dados de temperatura. O tipo de conteúdo foi especificado como application/json, portanto, para esta solicitação, o corpo é JSON. Note que, para a ondulação, ela é embrulhada em aspas simples; caso contrário, você precisa escapar das aspas duplas no JSON.

  • O último parâmetro é o URL para postar. Para a API de eventos de envio de dispositivo, a URL é: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Substitua [assigned_iot_hub_name] pelo nome do hub IoT ao qual seu dispositivo foi atribuído.

    • Substitua [device_id] pelo ID do dispositivo que foi atribuído quando registou o dispositivo. Para dispositivos provisionados por meio de grupos de inscrição, o ID do dispositivo será o ID de registro. Para inscrições individuais, você pode, opcionalmente, especificar uma ID de dispositivo diferente da ID de registro na entrada de inscrição.

Por exemplo, para um dispositivo com um ID de dispositivo de envio de um ponto de dados de my-symkey-device telemetria para um hub IoT chamado 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

Uma chamada bem-sucedida terá uma resposta semelhante à seguinte:

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

Passos Seguintes