Compartilhar via


Comunique-se com o DPS usando o protocolo MQTT

O Serviço de Provisionamento de Dispositivos (DPS) da Internet das Coisas do Azure permite que os dispositivos se comuniquem com o ponto de extremidade do dispositivo DPS usando:

O DPS não é um Agente MQTT completo e não dá suporte a todos os comportamentos especificados no padrão MQTT v3.1.1. Este artigo descreve como dispositivos podem usar comportamentos com suporte do MQTT para comunicar-se com o DPS.

Todas as comunicações de dispositivo com o DPS devem ser protegidas usando TLS/SSL. Portanto, o DPS não dá suporte a conexões não seguras pela porta 1883.

Observação

Atualmente, o DPS não dá suporte a dispositivos que usam o mecanismo de atestado TPM no protocolo MQTT.

Conectando-se ao DPS

Um dispositivo pode usar o protocolo MQTT para conectar-se a uma instância do DPS usando uma das opções a seguir.

Usando o protocolo MQTT diretamente (como um dispositivo)

Se um dispositivo não puder usar os SDKs do dispositivo, ainda poderá se conectar com os pontos de extremidade públicos do dispositivo usando o protocolo MQTT na porta 8883. No pacote CONNECT, o dispositivo deve usar os seguintes valores:

  • No campo ClientId, use o registrationId.

  • Para o campo nome de usuário , use {idScope}/registrations/{registration_id}/api-version=2019-03-31, em{idScope} é o escopo do ID do DPS e {registration_id} é a ID de registro do seu dispositivo.

    Observação

    Se você usar a autenticação de certificado X. 509, a ID de registro será fornecida pelo nome comum da entidade (CN) do seu certificado folha de dispositivo (end-Entity). {registration_id} no campo Username deve corresponder ao nome comum.

  • No campo Senha use um token SAS. O formato do token SAS é o mesmo, conforme descrito para os protocolos HTTPS e AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registrationO resourceURI deve estar no formato{idScope}/registrations/{registration_id}. O nome da política (skn) deve ser definido como registration.

    Observação

    Se você usa a autenticação de certificado X.509, as senhas de token SAS não são necessárias.

    Para saber mais sobre como gerar tokens SAS, confira a seção de dispositivo de Controlar o acesso ao DPS.

A lista a seguir contém comportamentos específicos da implementação do DPS:

  • O DPS não dá suporte a sessões persistentes. Ele trata cada sessão como não persistente, independentemente do valor do sinalizador CleanSession. É recomendável definir CleanSession como verdadeiro.

  • Quando um aplicativo do dispositivo assina um tópico com o QoS 2, o DPS concede, no máximo, o nível 1 do QoS no pacote SUBACK. Depois disso, o DPS entrega mensagens ao dispositivo usando QoS 1.

Configuração de TLS/SSL

Para usar o protocolo MQTT diretamente, o cliente deve se conectar por TLS 1.2. Tentativas de ignorar essa etapa falham com erros de conexão.

Registrando um dispositivo

Para registrar um dispositivo por meio do DPS, um dispositivo deve assinar usando $dps/registrations/res/# como um Filtro de Tópico. O curinga de vários níveis # no Filtro de Tópico é usado apenas para permitir que o dispositivo receba mais propriedades no nome do tópico. O DPS não permite o uso dos caracteres curinga # ou ? para filtragem de subtópicos. Como o DPS não é um agente de mensagens pub-sub de uso geral, ele dá suporte apenas aos nomes de tópico documentados e filtros de tópico.

O dispositivo deve publicar uma mensagem de registro no DPS usando $dps/registrations/PUT/iotdps-register/?$rid={request_id} como um Nome do Tópico. O conteúdo deve conter o objeto Registro de Dispositivo no formato JSON. Em um cenário bem-sucedido, o dispositivo recebe uma resposta sobre o nome do tópico $dps/registrations/res/202/?$rid={request_id}&retry-after=x em que x é o valor em segundos para a repetição.

Sondagem do status da operação de registro

O dispositivo deve sondar o serviço periodicamente para receber o resultado da operação de registro do dispositivo. Supondo que o dispositivo já tenha assinado o tópico $dps/registrations/res/#, ele pode publicar uma mensagem de status da operação no nome do tópico $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}. A ID da operação nesta mensagem deve ser o valor recebido na mensagem de resposta RegistrationOperationStatus na etapa anterior. No caso bem-sucedido, o serviço responde sobre o tópico $dps/registrations/res/200/?$rid={request_id}. O conteúdo da resposta contém o objeto RegistrationOperationStatus. O dispositivo deve continuar a sondar o serviço se o código de resposta for 202 após um atraso igual ao período de nova tentativa. A operação de registro do dispositivo será bem-sucedida se o serviço retornar um código de status 200.

Conectando por WebSocket

Ao se conectar via WebSocket, especifique o subprotocolo como mqtt. Siga o RFC 6455.

Próximas etapas

Para saber mais sobre o protocolo MQTT, confira a documentação do MQTT.

Para procurar o código MQTT de exemplo, confira exemplos de aplicativo MQTT.

Para explorar melhor as funcionalidades do DPS, consulte: