Communiceren met DPS met behulp van het MQTT-protocol
Met Azure IoT Device Provisioning Service (DPS) kunnen apparaten communiceren met het DPS-apparaateindpunt met behulp van:
- MQTT v3.1.1 op poort 8883
- MQTT v3.1.1 via WebSocket op poort 443.
DPS is geen volledige MQTT-broker en biedt geen ondersteuning voor alle gedragingen die zijn opgegeven in de MQTT v3.1.1-standaard. In dit artikel wordt beschreven hoe apparaten ondersteunde MQTT-gedragingen kunnen gebruiken om te communiceren met DPS.
Alle apparaatcommunicatie met DPS moet worden beveiligd met BEHULP van TLS/SSL. DPS biedt daarom geen ondersteuning voor niet-beveiligde verbindingen via poort 1883.
Notitie
DPS biedt momenteel geen ondersteuning voor apparaten die gebruikmaken van tpm-attestation-mechanisme via het MQTT-protocol.
Verbinding maken met DPS
Een apparaat kan het MQTT-protocol gebruiken om verbinding te maken met een DPS-exemplaar met behulp van een van de volgende opties.
- Bibliotheken in de Azure IoT-inrichtings-SDK's.
- Het MQTT-protocol rechtstreeks.
Het MQTT-protocol rechtstreeks gebruiken (als apparaat)
Als een apparaat de APPARAAT-SDK's niet kan gebruiken, kan het nog steeds verbinding maken met de eindpunten van het openbare apparaat met behulp van het MQTT-protocol op poort 8883. In het CONNECT-pakket moet het apparaat de volgende waarden gebruiken:
Gebruik registrationId voor het veld ClientId.
Gebruik voor het veld
{idScope}/registrations/{registration_id}/api-version=2019-03-31
Gebruikersnaam het{idScope}
id-bereik van de DPS en{registration_id}
is de registratie-id voor uw apparaat.Notitie
Als u X.509-certificaatverificatie gebruikt, wordt de registratie-id verstrekt door de algemene naam van het onderwerp (CN) van het certificaat van het apparaatblad (end-entity).
{registration_id}
in het veld Gebruikersnaam moet overeenkomen met de algemene naam.Gebruik een SAS-token voor het veld Wachtwoord . De indeling van het SAS-token is hetzelfde als voor de HTTPS- en AMQP-protocollen:
SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration
De resource-URI moet de indeling{idScope}/registrations/{registration_id}
hebben. De beleidsnaam (skn
) moet worden ingesteld opregistration
.Notitie
Als u X.509-certificaatverificatie gebruikt, zijn SAS-tokenwachtwoorden niet vereist.
Zie de sectie Beveiligingstokens van Toegang tot DPS beheren voor meer informatie over het genereren van SAS-tokens.
De volgende lijst bevat DPS-implementatiespecifiek gedrag:
DPS biedt geen ondersteuning voor permanente sessies. Elke sessie wordt behandeld als niet-persistent, ongeacht de waarde van de vlag CleanSession . U wordt aangeraden CleanSession in te stellen op true.
Wanneer een apparaat-app zich abonneert op een onderwerp met QoS 2, verleent DPS maximaal QoS-niveau 1 in het SUBACK-pakket . Daarna levert DPS berichten aan het apparaat met QoS 1.
TLS/SSL-configuratie
Als u het MQTT-protocol rechtstreeks wilt gebruiken, moet uw client verbinding maken via TLS 1.2. Pogingen om deze stap over te slaan, mislukken met verbindingsfouten.
Een apparaat registreren
Als u een apparaat wilt registreren via DPS, moet een apparaat zich abonneren als $dps/registrations/res/#
onderwerpfilter. Het jokerteken #
op meerdere niveaus in het onderwerpfilter wordt alleen gebruikt om toe te staan dat het apparaat meer eigenschappen in de onderwerpnaam ontvangt. DPS staat het gebruik van de #
of ?
jokertekens niet toe voor het filteren van subonderwerpen. Aangezien DPS geen pub-sub messaging-broker voor algemeen gebruik is, ondersteunt het alleen de gedocumenteerde onderwerpnamen en onderwerpfilters.
Het apparaat moet een registerbericht publiceren naar DPS met behulp van $dps/registrations/PUT/iotdps-register/?$rid={request_id}
een onderwerpnaam. De nettolading moet het object Apparaatregistratie in JSON-indeling bevatten.
In een geslaagd scenario ontvangt het apparaat een antwoord op de $dps/registrations/res/202/?$rid={request_id}&retry-after=x
onderwerpnaam waarbij x de waarde na een nieuwe poging in seconden is.
Polling voor registratiebewerkingsstatus
Het apparaat moet de service periodiek pollen om het resultaat van de apparaatregistratiebewerking te ontvangen. Ervan uitgaande dat het apparaat al is geabonneerd op het $dps/registrations/res/#
onderwerp, kan er een bericht over de status van de bewerking worden gepubliceerd naar de $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}
onderwerpnaam. De bewerkings-id in dit bericht moet de waarde zijn die is ontvangen in het antwoordbericht RegistrationOperationStatus in de vorige stap. In het geval dat de service reageert op het $dps/registrations/res/200/?$rid={request_id}
onderwerp. De nettolading van het antwoord bevat het object RegistrationOperationStatus. Het apparaat moet de service blijven peilen als de antwoordcode 202 is na een vertraging die gelijk is aan de periode na de nieuwe poging. De bewerking voor apparaatregistratie is geslaagd als de service een statuscode van 200 retourneert.
Verbinding maken via WebSocket
Wanneer u verbinding maakt via WebSocket, geeft u het subprotocol op als mqtt
. Volg RFC 6455.
Volgende stappen
Zie de MQTT-documentatie voor meer informatie over het MQTT-protocol.
Zie voorbeelden van MQTT-toepassingen om door voorbeeldcode van MQTT te bladeren.
Zie voor meer informatie over de mogelijkheden van DPS: