Dela via


Kommunicera med DPS med MQTT-protokollet

Med Azure IoT Device Provisioning Service (DPS) kan enheter kommunicera med DPS-enhetens slutpunkt med hjälp av:

DPS är inte en fullständig MQTT-mäklare och stöder inte alla beteenden som anges i MQTT v3.1.1-standarden. Den här artikeln beskriver hur enheter kan använda MQTT-beteenden som stöds för att kommunicera med DPS.

All enhetskommunikation med DPS måste skyddas med TLS/SSL. DpS stöder därför inte icke-säkerhetsanslutningar via port 1883.

Kommentar

DPS stöder för närvarande inte enheter som använder TPM-attesteringsmekanismen via MQTT-protokollet.

Anslut till DPS

En enhet kan använda MQTT-protokollet för att ansluta till en DPS-instans med något av följande alternativ.

Använda MQTT-protokollet direkt (som en enhet)

Om en enhet inte kan använda enhetens SDK:er kan den fortfarande ansluta till de offentliga enhetsslutpunkterna med MQTT-protokollet på port 8883. I CONNECT-paketet ska enheten använda följande värden:

  • För fältet ClientId använder du registrationId.

  • I fältet Användarnamn använder du {idScope}/registrations/{registration_id}/api-version=2019-03-31, där {idScope} är ID-omfånget för DPS och {registration_id} är registrerings-ID för din enhet.

    Kommentar

    Om du använder X.509-certifikatautentisering tillhandahålls registrerings-ID:t av certifikatets ämnesnamn (CN) för enhetsbladet (slutentitet). {registration_id} i fältet Användarnamn måste matcha det gemensamma namnet.

  • I fältet Lösenord använder du en SAS-token. Formatet för SAS-token är detsamma som för både HTTPS- och AMQP-protokollen:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration ResourceURI:n ska ha formatet {idScope}/registrations/{registration_id}. Principnamnet (skn) ska vara inställt på registration.

    Kommentar

    Om du använder X.509-certifikatautentisering krävs inte SAS-tokenlösenord.

    Mer information om hur du genererar SAS-token finns i avsnittet säkerhetstoken i Kontrollera åtkomst till DPS.

Följande lista innehåller DPS-implementeringsspecifika beteenden:

  • DPS stöder inte beständiga sessioner. Varje session behandlas som icke-beständig, oavsett värdet för cleansession-flaggan . Vi rekommenderar att du anger CleanSession till true.

  • När en enhetsapp prenumererar på ett ämne med QoS 2 beviljar DPS högsta QoS-nivå 1 i SUBACK-paketet . Därefter levererar DPS meddelanden till enheten med hjälp av QoS 1.

TLS/SSL-konfiguration

Om du vill använda MQTT-protokollet direkt måste klienten ansluta via TLS 1.2. Försök att hoppa över det här steget misslyckas med anslutningsfel.

Registrera en enhet

Om du vill registrera en enhet via DPS bör en enhet prenumerera med hjälp av $dps/registrations/res/# ett ämnesfilter. Jokertecknet # på flera nivåer i ämnesfiltret används bara för att tillåta att enheten tar emot fler egenskaper i ämnesnamnet. DPS tillåter inte användning av # jokertecken eller ? jokertecken för filtrering av underavsnitt. Eftersom DPS inte är en allmän meddelandekö för pub-sub stöder det bara de dokumenterade ämnesnamnen och ämnesfiltren.

Enheten bör publicera ett registermeddelande till DPS med hjälp av $dps/registrations/PUT/iotdps-register/?$rid={request_id} som ämnesnamn. Nyttolasten ska innehålla objektet Enhetsregistrering i JSON-format. I ett lyckat scenario får enheten ett svar på $dps/registrations/res/202/?$rid={request_id}&retry-after=x ämnesnamnet där x är återförsöksvärdet på några sekunder.

Avsökning för registreringsåtgärdsstatus

Enheten måste avsöka tjänsten regelbundet för att få resultatet av enhetsregistreringsåtgärden. Förutsatt att enheten redan har prenumererat på ämnet kan den $dps/registrations/res/# publicera ett meddelande om status för get-åtgärden till ämnesnamnet $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} . Åtgärds-ID:t i det här meddelandet ska vara värdet som tas emot i registreringsåtgärdstatus-svarsmeddelandet i föregående steg. I det lyckade fallet svarar tjänsten på ämnet $dps/registrations/res/200/?$rid={request_id} . Nyttolasten för svaret innehåller objektet RegistrationOperationStatus. Enheten bör fortsätta att avsöka tjänsten om svarskoden är 202 efter en fördröjning som motsvarar återförsöket efter perioden. Enhetsregistreringsåtgärden lyckas om tjänsten returnerar statuskoden 200.

Anslut över Websocket

När du ansluter via Websocket anger du delprotokolen som mqtt. Följ RFC 6455.

Nästa steg

Mer information om MQTT-protokollet finns i MQTT-dokumentationen.

Information om hur du bläddrar i MQTT-exempelkod finns i MQTT-programexempel.

Mer information om funktionerna i DPS finns i: