Mosquitto: API-authenticatie

Hoe duizenden apparaten te authenticeren met een externe API

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Mosquitto MQTT cloud oplossing die tal van voordelen biedt, waaronder:

  • Onbeperkte uitwisseling en overdracht van berichten.
  • Onbeperkte apparaatverificatie via een externe API.
  • Geavanceerde ACL's op onderwerpen, gebruikers en acties.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://mqtt.uw-bedrijf.com).
  • Moeiteloze updates met slechts één klik.
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Mosquitto MQTT cloud hosting oplossing van Stackhero te proberen!

Bij apparaat-authenticatie heeft u twee hoofdbenaderingen. U kunt ofwel een eenvoudige methode gebruiken of de authenticatie delegeren aan een externe API.

De eenvoudigste methode werkt goed als u minder dan 20 apparaten heeft en geen geavanceerde ACL-controles nodig heeft. In dit geval kunt u een individuele login en wachtwoord voor elk apparaat aanmaken in uw serviceconfiguratie op het Stackhero-dashboard.

Alternatief kunt u de authenticatie delegeren aan een externe API. Deze benadering biedt dynamisch beheer van inloggegevens en stelt u in staat robuuste ACL's te implementeren. ACL's (Access Control Lists) laten u toe om precieze permissies te definiëren voor het publiceren of abonneren op specifieke onderwerpen voor elke gebruiker.

Het gebruik van externe API-authenticatie is bijzonder nuttig wanneer u meer dan 20 IoT-apparaten heeft of wanneer u gedetailleerd onderwerp ACL-beheer nodig heeft.

Wanneer een apparaat verbinding maakt met MQTT, stuurt Mosquitto een HTTP POST-verzoek naar uw API. Het verzoek bevat een JSON-payload met de gebruikersnaam en het wachtwoord van het apparaat. Als uw API een HTTP-statuscode 200 retourneert, is het apparaat geautoriseerd. Elke andere statuscode dan 200 (zoals 401) resulteert in het weigeren van toegang voor het apparaat.

Tijdens ACL-validatie worden vier parameters verzonden: username, clientid, topic, en acc. Uw API moet verifiëren dat de username is toegestaan om de operatie gedefinieerd door acc op het topic uit te voeren. De acc-parameter is als volgt gedefinieerd:

  1. lees toegang (1)
  2. schrijf toegang (2)
  3. lees- en schrijf toegang (3)
  4. abonneer toegang (4)

Bijvoorbeeld, als de gebruiker userA probeert zich te abonneren op het onderwerp sensors/temperatures, ontvangt uw API de volgende JSON:

{
  "username": "userA",
  "clientid": "userA",
  "topic": "sensors/temperatures",
  "acc": 4
}

Wanneer u gebruikersauthenticatie via een API gebruikt, kunt u nog steeds gebruikers handmatig definiëren in het Stackhero-dashboard. In dat geval krijgen de handmatig gedefinieerde gebruikers voorrang.

Om te demonstreren hoe externe API-authenticatie in de praktijk werkt, hebben we een voorbeeld API-server gemaakt met Node.js. U kunt de volledige repository hier verkennen: https://github.com/stackhero-io/mosquittoGettingStarted.

Stackhero voor Node-RED bevat een Mosquitto-server. Desalniettemin, voor geavanceerd gebruik, wordt aanbevolen om een zelfstandige Mosquitto-service te hebben. Dit voorbeeld laat zien hoe u het API-authenticatiesysteem kunt gebruiken met een zelfstandige Mosquitto-service en een Node-RED-service. Als u de Mosquitto-service gebruikt die bij uw Node-RED is inbegrepen, is deze gids niet op u van toepassing.

Stackhero voor Node-RED biedt een voorbeeld van een MQTT API-verbinding in de flow genaamd "MQTT authentication." Deze flow wordt ook gebruikt met de geïntegreerde Mosquitto-server in Stackhero voor Node-RED.

Om Node-RED als uw API-authenticatie-eindpunt te gebruiken, werkt u uw Mosquitto-configuratie als volgt bij:

  1. Schakel de optie API authentication in.
  2. Stel het veld Host in op uw Node-RED-domein.
  3. Kies HTTPS als Protocol en voer 443 in voor de Port.
  4. Specificeer de User route als /mqttAuthentication/userGet.
  5. Specificeer de ACLs route als /mqttAuthentication/aclCheck.

Voor debugging kunt u de "Authentication cache time" instellen op 1 seconde. Zodra uw setup soepel werkt, is de aanbevolen waarde 30 seconden.

Mosquitto configuratievoorbeeldMosquitto configuratievoorbeeld

Na het bijwerken van de Mosquitto-configuratie, start Node-RED en open de MQTT authentication flow. Bewerk de Users node om uw gebruikersreferenties te configureren. De meegeleverde voorbeelden bevatten verschillende combinaties van gebruikersnamen en wachtwoorden. Voeg gerust zoveel gebruikers toe als nodig is.

Node-RED MQTT-authenticatie flowNode-RED MQTT-authenticatie flow