Mosquitto: Autenticación API
Cómo autenticar miles de dispositivos usando una API externa
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución Mosquitto MQTT cloud lista para usar que proporciona una serie de beneficios, incluyendo:
- Intercambios y transferencias de mensajes ilimitados.
- Autenticación de dispositivos ilimitada a través de una API externa.
- ACLs avanzadas en temas, usuarios y acciones.
- Nombre de dominio personalizable asegurado con HTTPS (por ejemplo, https://mqtt.su-empresa.com).
- Actualizaciones sin esfuerzo con solo un clic.
- Rendimiento óptimo y seguridad robusta impulsados por una VM privada y dedicada.
Ahorre tiempo y simplifique su vida: ¡solo toma 5 minutos probar la solución de Mosquitto MQTT cloud hosting de Stackhero!
Cuando se trata de la autenticación de dispositivos, tiene dos enfoques principales. Puede usar un método simple o delegar la autenticación a una API externa.
El método más simple funciona bien si tiene menos de 20 dispositivos y no requiere controles ACL avanzados. En este caso, puede crear un inicio de sesión y contraseña individuales para cada dispositivo en la configuración de su servicio en el panel de Stackhero.
Alternativamente, puede delegar la autenticación a una API externa. Este enfoque ofrece gestión dinámica de credenciales y le permite implementar ACLs robustas. Las ACLs (Listas de Control de Acceso) le permiten definir permisos precisos para publicar o suscribirse a temas específicos para cada usuario.
Cómo funciona la autenticación API MQTT
Usar la autenticación API externa es particularmente útil cuando tiene más de 20 dispositivos IoT o cuando necesita una gestión detallada de ACLs de temas.
Cuando un dispositivo se conecta a MQTT, Mosquitto envía una solicitud HTTP POST a su API. La solicitud incluye una carga JSON que contiene el nombre de usuario y la contraseña del dispositivo. Si su API devuelve un código de estado HTTP 200, el dispositivo está autorizado. Cualquier código de estado diferente de 200 (como 401) resulta en el rechazo del acceso del dispositivo.
Durante la validación de ACL, se transmiten cuatro parámetros: username, clientid, topic y acc. Su API debe verificar que el username está autorizado para realizar la operación definida por acc en el topic. El parámetro acc se define de la siguiente manera:
- acceso de lectura (1)
- acceso de escritura (2)
- acceso de lectura y escritura (3)
- acceso de suscripción (4)
Por ejemplo, si el usuario userA intenta suscribirse al tema sensors/temperatures, su API recibirá el siguiente JSON:
{
"username": "userA",
"clientid": "userA",
"topic": "sensors/temperatures",
"acc": 4
}
Cuando utiliza la autenticación de usuario a través de una API, aún puede definir usuarios manualmente en el panel de Stackhero. En ese caso, los usuarios definidos manualmente tendrán prioridad.
Autenticación API MQTT en Node.js
Para demostrar cómo funciona la autenticación API externa en la práctica, hemos creado un servidor API de ejemplo usando Node.js. Puede explorar el repositorio completo aquí: https://github.com/stackhero-io/mosquittoGettingStarted.
Autenticación API MQTT con Node-RED
Stackhero para Node-RED incluye un servidor Mosquitto. No obstante, para un uso avanzado, se recomienda tener un servicio Mosquitto independiente. Este ejemplo muestra cómo usar el sistema de autenticación API con un servicio Mosquitto independiente y un servicio Node-RED. Si utiliza el servicio Mosquitto incluido con su Node-RED, esta guía no se aplica a usted.
Stackhero para Node-RED proporciona un ejemplo de conexión API MQTT en el flujo llamado "MQTT authentication". Este flujo también se utiliza con el servidor Mosquitto integrado en Stackhero para Node-RED.
Configurar Mosquitto para usar Node-RED como API de autenticación
Para usar Node-RED como su punto final de autenticación API, actualice su configuración de Mosquitto de la siguiente manera:
- Habilite la opción
API authentication. - Establezca el campo
Hosten su dominio Node-RED. - Elija
HTTPScomoProtocole ingrese443para elPort. - Especifique la
User routecomo/mqttAuthentication/userGet. - Especifique la
ACLs routecomo/mqttAuthentication/aclCheck.
Para la depuración, puede establecer el "Authentication cache time" en 1 segundo. Una vez que su configuración esté funcionando sin problemas, el valor recomendado es de 30 segundos.
Ejemplo de configuración de Mosquitto
Configurar Node-RED como API de autenticación MQTT
Después de actualizar la configuración de Mosquitto, inicie Node-RED y abra el flujo MQTT authentication. Edite el nodo Users para configurar sus credenciales de usuario. Los ejemplos proporcionados incluyen varias combinaciones de nombres de usuario y contraseñas. No dude en agregar tantos usuarios como sea necesario.
Flujo de autenticación MQTT Node-RED