Share via


Comunicación con DPS mediante el protocolo MQTT

Azure IoT Device Provisioning Service (DPS) permite a los dispositivos comunicarse con el punto de conexión del dispositivo DPS mediante:

DPS no es un agente MQTT completo y no admite todos los comportamientos especificados en el estándar MQTT v3.1.1. En este artículo se describe la manera en que los dispositivos pueden utilizar comportamientos admitidos de MQTT para comunicarse con DPS.

Toda comunicación de los dispositivos con DPS se debe proteger mediante TLS/SSL. Por lo tanto, DPS no admite conexiones no seguras a través del puerto 1883.

Nota:

Actualmente, DPS no admite dispositivos que utilizan el mecanismo de certificación TPM a través del protocolo MQTT.

Conexión a DPS

Un dispositivo puede usar el protocolo MQTT para conectarse a una instancia de DPS mediante cualquiera de las opciones siguientes.

Uso del protocolo MQTT directamente (como un dispositivo)

Si los SDK de dispositivo no pueden usarse en un dispositivo concreto, seguirá siendo posible conectarse a los puntos de conexión públicos del dispositivo mediante el protocolo MQTT y desde el puerto 8883. En el paquete CONNECT el dispositivo debe usar los siguientes valores:

  • Para el campo ClientId, use registrationId.

  • En el campo Nombre de usuario, use {idScope}/registrations/{registration_id}/api-version=2019-03-31, donde {idScope} es el ámbito de identificador de DPS y {registration_id} es el identificador de registro del dispositivo.

    Nota:

    Si usa la autenticación de certificado X.509, el identificador de registro lo proporciona el nombre común (CN) del firmante del certificado de hoja del dispositivo (entidad final). {registration_id} en el campo Nombre de usuario debe coincidir con el nombre común.

  • Para el campo Contraseña , use un token SAS. El formato del token de SAS es el mismo que para los protocolos HTTPS y AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration El resourceURI debe tener el formato {idScope}/registrations/{registration_id}. El nombre de la directiva (skn) debe establecerse en registration.

    Nota:

    Las contraseñas de token de SAS no son necesarias si utiliza la autenticación de certificados X.509.

    Para obtener más información sobre cómo generar tokens SAS, consulte la sección de tokens de seguridad de Control de acceso a DPS.

La lista siguiente contiene comportamientos específicos de la implementación de DPS:

  • DPS no admite sesiones persistentes. Trata cada sesión como no persistente, independientemente del valor de la marca CleanSession. Se recomienda establecer el valor de CleanSession en verdadero.

  • Cuando una aplicación de dispositivo se suscribe a un tema con QoS 2, DPS concede el nivel de QoS máximo 1 en el paquete SUBACK. Después de eso, DPS envía mensajes al dispositivo con QoS 1.

Configuración de TLS/SSL

Para usar el protocolo MQTT directamente, el cliente debe conectarse mediante TLS 1.2. Si intenta omitir este paso, se producirá un error con errores de conexión.

Registro de un dispositivo

Para registrar un dispositivo mediante DPS, un dispositivo debe suscribirse mediante $dps/registrations/res/# como un filtro de tema. El comodín de varios niveles # en el filtro de tema solo se utiliza para permitir que el dispositivo reciba propiedades adicionales en el nombre del tema. DPS no permite el uso de los caracteres comodín # ni ? para el filtrado de subtemas. Dado que DPS no es un agente de mensajería publicación-suscripción de uso general, solo admite los nombres de tema documentados y los filtros de tema.

El dispositivo debe publicar un mensaje de registro en DPS mediante $dps/registrations/PUT/iotdps-register/?$rid={request_id} como Nombre del tema. La carga útil debe contener el objeto Registro de dispositivo en formato JSON. En un escenario correcto, el dispositivo recibe una respuesta en el nombre del tema de $dps/registrations/res/202/?$rid={request_id}&retry-after=x, donde x es el valor de reintento en segundos.

Sondeo para el estado de la operación de registro

El dispositivo debe sondear el servicio periódicamente para recibir el resultado de la operación de registro del dispositivo. Suponiendo que el dispositivo ya se ha suscrito al tema de $dps/registrations/res/#, puede publicar un mensaje de estado de obtención de la operación en el nombre del tema $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}. El identificador de operación de este mensaje debe ser el valor recibido en el mensaje de respuesta RegistrationOperationStatus en el paso anterior. En el caso correcto, el servicio responde en el tema $dps/registrations/res/200/?$rid={request_id}. La carga de la respuesta contiene el objeto RegistrationOperationStatus. El dispositivo debe seguir sondeando el servicio si el código de respuesta es 202 después de un retraso igual al período de reintento. La operación de registro del dispositivo es exitosa si el servicio devuelve un código de estado 200.

Conexión a través de Websocket

Al conectarse a través de Websocket, especifique el subprotocolo como mqtt. Siga RFC 6455.

Pasos siguientes

Para obtener más información sobre el protocolo MQTT, consulte la documentación de MQTT.

Para examinar el código MQTT de ejemplo, consulte ejemplos de aplicaciones MQTT.

Para explorar aún más las funcionalidades de DPS, consulte: