Mosquitto: Authentification API

Comment authentifier des milliers d'appareils en utilisant une API externe

👋 Bienvenue dans la documentation Stackhero !

Stackhero vous offre un environnement Mosquitto MQTT cloud entièrement géré, conçu pour la fiabilité et la flexibilité :

  • Débit illimité pour les messages et les transferts de données, afin que vos workflows ne soient jamais limités artificiellement.
  • Authentification illimitée des appareils via votre propre API externe, pour simplifier l'intégration et la gestion des accè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 à l'image de votre marque (par exemple : https://mqtt.votre-entreprise.com).
  • Mises à jour sans tracas : appliquez les améliorations ou correctifs de sécurité en un seul 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 mettre en place une instance Mosquitto MQTT cloud hosting sécurisée et prête pour la production en seulement quelques minutes.

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.

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 :

  1. accès en lecture (1)
  2. accès en écriture (2)
  3. accès en lecture et écriture (3)
  4. 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.

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.

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.

Pour utiliser Node-RED comme point de terminaison d'authentification API, mettez à jour votre configuration Mosquitto comme suit :

  1. Activez l'option API authentication.
  2. Définissez le champ Host sur votre domaine Node-RED.
  3. Choisissez HTTPS comme Protocol et entrez 443 pour le Port.
  4. Spécifiez la User route comme /mqttAuthentication/userGet.
  5. Spécifiez la ACLs route comme /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 MosquittoExemple de configuration Mosquitto

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-REDFlux d'authentification MQTT Node-RED