Mosquitto: Authentification API
Comment authentifier des milliers d'appareils via une API externe
👋 Bienvenue sur la documentation de Stackhero !
Stackhero vous propose un environnement Mosquitto MQTT cloud entièrement managé, pensé pour la fiabilité et la flexibilité :
- Débit illimité pour les messages et transferts de données, afin que vos workflows ne rencontrent jamais de limites artificielles.
- Authentification illimitée de vos appareils via votre propre API externe, pour un onboarding et une gestion des accès simplifiés.
- ACLs avancées pour un contrôle précis des topics, des utilisateurs et des actions.
- Un nom de domaine personnalisé avec HTTPS intégré pour des endpoints sécurisés et à votre image (par exemple : https://mqtt.votre-entreprise.com).
- Mises à jour sans effort : appliquez les améliorations ou correctifs de sécurité en un clic.
- Performance constante et sécurité renforcée, chaque instance fonctionnant sur une infrastructure privée et dédiée.
Accélérez vos projets IoT et réduisez la charge opérationnelle. Vous pouvez disposer d'une instance Mosquitto MQTT cloud hosting sécurisée et prête pour la production en seulement quelques minutes.
Pour l'authentification des appareils, deux approches principales s'offrent à vous. Vous pouvez soit utiliser une méthode simple, soit déléguer l'authentification à une API externe.
La méthode la plus simple convient si vous avez moins de 20 appareils et que vous n'avez pas besoin de contrôles ACL avancés. Dans ce cas, il suffit de créer un identifiant et un mot de passe pour chaque appareil dans la configuration de votre service sur le tableau de bord Stackhero.
Sinon, vous pouvez déléguer l'authentification à une API externe. Cette approche permet une gestion dynamique des identifiants et vous offre la possibilité de mettre en place des ACLs robustes. Les ACLs (Access Control Lists) permettent de définir des droits précis pour publier ou s'abonner à des topics spécifiques pour chaque utilisateur.
Fonctionnement de l'authentification MQTT via API
L'utilisation d'une authentification externe par API est particulièrement adaptée si vous gérez plus de 20 appareils IoT ou si vous avez besoin d'une gestion fine des ACLs par topic.
Lorsqu'un appareil se connecte à MQTT, Mosquitto envoie une requête HTTP POST à votre API. Cette requête contient un payload JSON avec le nom d'utilisateur et le mot de passe de l'appareil. Si votre API retourne un code HTTP 200, l'appareil est autorisé. Tout autre code (comme 401) entraîne un refus d'accès.
Lors de la validation des ACLs, 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 lecture et écriture (3)
- accès abonnement (4)
Par exemple, si l'utilisateur userA tente de s'abonner au topic sensors/temperatures, votre API recevra le JSON suivant :
{
"username": "userA",
"clientid": "userA",
"topic": "sensors/temperatures",
"acc": 4
}
Lorsque vous utilisez l'authentification des utilisateurs 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 MQTT via API en Node.js
Pour illustrer le fonctionnement de l'authentification externe par API, nous avons créé un exemple de serveur API en Node.js. Vous pouvez consulter le dépôt complet ici : https://github.com/stackhero-io/mosquittoGettingStarted.
Authentification MQTT via API avec Node-RED
Stackhero for Node-RED inclut un serveur Mosquitto. Cependant, pour des usages avancés, il est recommandé d'utiliser un service Mosquitto dédié. 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 intégré à votre Node-RED, ce guide ne vous concerne pas.
Stackhero for Node-RED propose un exemple de connexion MQTT via API dans le flow nommé "MQTT authentication". Ce flow est également utilisé avec le serveur Mosquitto intégré à Stackhero for Node-RED.
Configuration de Mosquitto pour utiliser Node-RED comme API d'authentification
Pour utiliser Node-RED comme endpoint d'authentification API, modifiez la configuration de Mosquitto comme suit :
- Activez l'option
API authentication. - Renseignez le champ
Hostavec le domaine de votre Node-RED. - Choisissez
HTTPScommeProtocolet indiquez443pour lePort. - Indiquez la
User routecomme/mqttAuthentication/userGet. - Indiquez la
ACLs routecomme/mqttAuthentication/aclCheck.
Pour le debug, vous pouvez définir le "Authentication cache time" à 1 seconde. Une fois votre configuration validée, la valeur recommandée est 30 secondes.
Exemple de configuration Mosquitto
Configuration de Node-RED comme API d'authentification MQTT
Après avoir mis à jour la configuration de Mosquitto, lancez Node-RED et ouvrez le flow MQTT authentication. Modifiez le noeud Users pour configurer vos identifiants utilisateurs. 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.
Flow d'authentification MQTT dans Node-RED