Mosquitto: Authentification API
Comment authentifier des milliers d'appareils en utilisant une API externe
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Mosquitto MQTT cloud prête à l'emploi offrant de nombreux avantages, notamment :
- Échanges et transferts illimités de messages.
- Authentification illimitée des appareils via une API externe.
- ACLs avancées sur les topics, utilisateurs et actions.
- Nom de domaine personnalisable sécurisé avec HTTPS (par exemple, https://mqtt.votre-entreprise.com).
- Mises à jour simplifiées en un clic.
- Performance optimale et sécurité robuste grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Mosquitto MQTT cloud hosting de Stackhero !
En matière d'authentification des appareils, vous avez deux approches principales. Vous pouvez soit utiliser une méthode simple, soit déléguer l'authentification à une API externe.
La méthode la plus simple fonctionne bien si vous avez moins de 20 appareils et que vous n'avez pas besoin de contrôles ACL avancés. Dans ce cas, vous pouvez créer un identifiant et un mot de passe individuels pour chaque appareil dans la configuration de votre service sur le tableau de bord Stackhero.
Alternativement, vous pouvez déléguer l'authentification à une API externe. Cette approche offre une gestion dynamique des identifiants et vous permet de mettre en œuvre des ACL robustes. Les ACL (Listes de Contrôle d'Accès) vous permettent de définir des permissions précises pour publier ou s'abonner à des sujets spécifiques pour chaque utilisateur.
Comment fonctionne l'authentification API MQTT
L'utilisation de l'authentification API externe est particulièrement utile lorsque vous avez plus de 20 appareils IoT ou lorsque vous avez besoin d'une gestion détaillée des ACL de sujets.
Lorsqu'un appareil se connecte à MQTT, Mosquitto envoie une requête HTTP POST à votre API. La requête inclut une charge JSON contenant le nom d'utilisateur et le mot de passe de l'appareil. Si votre API renvoie un code de statut HTTP 200, l'appareil est autorisé. Tout code de statut autre que 200 (comme 401) entraîne le refus d'accès de l'appareil.
Lors de la validation des ACL, quatre paramètres sont transmis : username, clientid, topic, et acc. Votre API doit vérifier que le username est autorisé à effectuer l'opération définie par acc sur le topic. Le paramètre acc est défini comme suit :
- accès en lecture (1)
- accès en écriture (2)
- accès en lecture et écriture (3)
- accès à l'abonnement (4)
Par exemple, si l'utilisateur userA tente de s'abonner au sujet sensors/temperatures, votre API recevra le JSON suivant :
{
"username": "userA",
"clientid": "userA",
"topic": "sensors/temperatures",
"acc": 4
}
Lorsque vous utilisez l'authentification utilisateur via une API, vous pouvez toujours définir des utilisateurs manuellement dans le tableau de bord Stackhero. Dans ce cas, les utilisateurs définis manuellement seront prioritaires.
Authentification API MQTT en Node.js
Pour démontrer comment fonctionne l'authentification API externe en pratique, nous avons créé un serveur API exemple en Node.js. Vous pouvez explorer le dépôt complet ici : https://github.com/stackhero-io/mosquittoGettingStarted.
Authentification API MQTT avec Node-RED
Stackhero pour Node-RED inclut un serveur Mosquitto. Néanmoins, pour une utilisation avancée, il est recommandé d'avoir un service Mosquitto autonome. Cet exemple montre comment utiliser le système d'authentification API avec un service Mosquitto autonome et un service Node-RED. Si vous utilisez le service Mosquitto inclus avec votre Node-RED, ce guide ne s'applique pas à vous.
Stackhero pour Node-RED fournit un exemple de connexion API MQTT dans le flux nommé "MQTT authentication". Ce flux est également utilisé avec le serveur Mosquitto intégré dans Stackhero pour Node-RED.
Configurer Mosquitto pour utiliser Node-RED comme API d'authentification
Pour utiliser Node-RED comme point de terminaison d'authentification API, mettez à jour votre configuration Mosquitto comme suit :
- Activez l'option
API authentication. - Définissez le champ
Hostsur votre domaine Node-RED. - Choisissez
HTTPScommeProtocolet entrez443pour lePort. - Spécifiez la
User routecomme/mqttAuthentication/userGet. - Spécifiez la
ACLs routecomme/mqttAuthentication/aclCheck.
Pour le débogage, vous pouvez définir le "Authentication cache time" à 1 seconde. Une fois votre configuration opérationnelle, la valeur recommandée est de 30 secondes.
Exemple de configuration Mosquitto
Configurer Node-RED comme API d'authentification MQTT
Après avoir mis à jour la configuration Mosquitto, lancez Node-RED et ouvrez le flux MQTT authentication. Modifiez le nœud Users pour configurer vos identifiants utilisateur. Les exemples fournis incluent plusieurs combinaisons de noms d'utilisateur et de mots de passe. N'hésitez pas à ajouter autant d'utilisateurs que nécessaire.
Flux d'authentification MQTT Node-RED