Usando credenciales MQTT bootstrap para autenticar dispositivos sin saber de antemano el clientID


#1

1. Introducción

La autenticación bootstrap de MyQttHub permite crear una serie de credenciales (usuario + clave) que permite autenticar un grupo de dispositivos MQTT sin saber de antemano el clientID que será usado. Optionalmente soporta registrar dicho dispositivo MQTT para que sea permanente, de manera que puede ser configurado más adelante.

Este tipo de autenticación permite soportar los siguientes casos de uso generales:

a) Dispositivos MQTT que no soporten configurar el clientID: sólo usuario y clave.

b) Autenticar y arrancar (usualmente) un conjunto grande de dispositivos, para los cuales, todos ellos usarán el mismo usuario y contreaseña, y, cuando conecten (MQTT CONNECT), proporcionarán un clientID único y diferente de manera que puedan ser diferenciados y gestionados por su HUB MQTT como unidades independientes.

El caso b) también se expande con el uso de la opción “register device”, de manera que, por ejemplo, puede registrar 100 dispositivos usando las mismas credenciales, y haciendo que la plataforma registre dicho dispositivo (de manera que puedan ser configurados a través del panel, y también obtener acceso completo a las características que MQTT proporciona, como por ejemplo, soporte de almacenamiento que puede sobrevivir a través de las sesiones de estos dispositivos).

2. Cómo usar las credenciales bootstrap auth

El mecanismo es realmente simple. A continuación se muestran los pasos para crear las primeras credenciales bootstrap auth MQTT:

  1. Dentro de tu panel MyQTTHub, haz click en “bootstrap”, dentro de la gestión del dominio (HUB MQTT), y luego pulse añadir:

  2. Ahora vaya a la sección bootstrap:

  3. Ahora añada las credenciales bootstrap y opcionalmente, pulse sobre register device:

Ahora, ya puede configurar estas credenciales como usuario y contraseña en cualquier dispositivo MQTT. Con ellas, sus dispositivos autenticarán sin problemas dentro de su HUB MQTT, siempre y cuando usen un clientID diferente (no registrado por un dispositivo permanente y no usado por cualquier otro dispositivo MQTT conectado a su HUB).

3. ¿Cómo funciona un dispositivo que ha conectado usando bootstrap auth?

Cualquier dispositivo que conecte usando bootstrap auth, funcionará del siguiente modo:

  1. El dispositivo MQTT conectará (autenticará), siempre y cuando proporcione un usuario y contraseña correctos, y el clientId proporcionado no esté siendo usado por ningún dispositivo y no esté en uso por otro dispositivo conectado (con independencia de cómo conectaron).

  2. Si un dispositivo conecta con unas credenciales bootstrap auth configuradas para [register device], entonces ese dispositivo será registrado y la indicación cleanSession será respetada.

  3. En caso de que el dispositivo conecte por segunda vez (y siguientes), y use credenciales bootstrap configuradas para [register device], entonces autenticará con el mecanismo regular (sin usar bootstrap auth).

    Efectivamente, este dispositivo fue registrado cuando conectó por primera vez. En dicho caso, el dispositivo funcionará como uno normal, de hecho, aparecerá como un dispositivo que se puede gestionar en la sección Devices:

  4. En caso de que un dispositivo conecte correctamente con credenciales bootstrap que NO tenga configurado el [register device], entonces dicho dispositivo será considerado como virtual (el mismo estado que se adquiere cuando se usa la opción de omitir reemplazo de conexión) de manera que la indicación cleanSession se fuerza a true. Eso es, todas las subscripciones y mensajes pendientes para este dispositivo serán perdidos cuando desconecte.

4. ¿Cuándo debería usar la opción [register device]?

Dependerá del escenario que quiera implementar. A continuación algunas pistas:

  1. Mascota vs. Ganado: si tiene un grupo grande de dispositivos que sólo producen datos (PUBLISH) y no quiere gestionarlos de manera individual, puede evitar añadir cada dispositivo uno por uno en la sección Devices, y en su lugar, puede añadir una única credencial bootstrap auth sin activar [register device] debido a que no le interesa cada dispositivo individual: simplemente quiere que conecten y publiquen (PUBLISH).

  2. Aplicaciones sin soporte para configurar el clientID: en caso de que quiera conectar con una aplicación MQTT, broker, etc, y que no tenga posibilidad para configurar un clientID fijo, sino que lo inicializan cuando conectan, entonces puede usar [register device] simplemente para asegurar que cuando conecta por segunda vez, ya se gestiona como un dispositivo registrado (que puede ser configurado y que puede puede implementar cleanSession).


Configurando el Cliente MQTT Push Client para conectar con MyQttHub
Cómo conectar MyMQTT a MyQttHub.com
Dar de alta en el broker devices sin tener que hacerlo manualmente
No logro conectarme
MyQttHub ES -- Empieza por aquí
Credenciales "bootstrap" con plan Open
Realmente tengo que crear tantos dispositivos como tengo?
MyQttHub y la especificación SparkPlug