Mosquitto: API-Authentifizierung
Wie man Tausende von Geräten mit einer externen API authentifiziert
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Mosquitto MQTT Cloud Lösung, die zahlreiche Vorteile bietet, darunter:
- Unbegrenzter Nachrichtenaustausch und -transfer.
- Unbegrenzte Geräteauthentifizierung über eine externe API.
- Erweiterte ACLs für Themen, Benutzer und Aktionen.
- Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://mqtt.ihre-firma.com).
- Mühelose Updates mit nur einem Klick.
- Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Mosquitto MQTT Cloud Hosting Lösung von Stackhero auszuprobieren!
Bei der Geräteauthentifizierung haben Sie zwei Hauptansätze. Sie können entweder eine einfache Methode verwenden oder die Authentifizierung an eine externe API delegieren.
Die einfachste Methode funktioniert gut, wenn Sie weniger als 20 Geräte haben und keine erweiterten ACL-Kontrollen benötigen. In diesem Fall können Sie für jedes Gerät ein individuelles Login und Passwort in Ihrer Dienstkonfiguration auf dem Stackhero-Dashboard erstellen.
Alternativ können Sie die Authentifizierung an eine externe API delegieren. Dieser Ansatz bietet dynamisches Anmeldedatenmanagement und ermöglicht die Implementierung robuster ACLs. ACLs (Access Control Lists) erlauben es Ihnen, präzise Berechtigungen für das Veröffentlichen oder Abonnieren spezifischer Themen für jeden Benutzer zu definieren.
Wie die MQTT-API-Authentifizierung funktioniert
Die Verwendung der externen API-Authentifizierung ist besonders nützlich, wenn Sie mehr als 20 IoT-Geräte haben oder eine detaillierte Themen-ACL-Verwaltung benötigen.
Wenn sich ein Gerät mit MQTT verbindet, sendet Mosquitto eine HTTP-POST-Anfrage an Ihre API. Die Anfrage enthält eine JSON-Nutzlast mit dem Benutzernamen und Passwort des Geräts. Wenn Ihre API einen HTTP-Statuscode 200 zurückgibt, ist das Gerät autorisiert. Jeder andere Statuscode als 200 (wie 401) führt dazu, dass dem Gerät der Zugriff verweigert wird.
Während der ACL-Validierung werden vier Parameter übermittelt: username, clientid, topic und acc. Ihre API sollte überprüfen, ob der username berechtigt ist, die durch acc definierte Operation auf dem topic auszuführen. Der acc-Parameter ist wie folgt definiert:
- Lesezugriff (1)
- Schreibzugriff (2)
- Lese- und Schreibzugriff (3)
- Abonnementzugriff (4)
Zum Beispiel, wenn der Benutzer userA versucht, das Thema sensors/temperatures zu abonnieren, erhält Ihre API folgendes JSON:
{
"username": "userA",
"clientid": "userA",
"topic": "sensors/temperatures",
"acc": 4
}
Wenn Sie die Benutzerauthentifizierung über eine API verwenden, können Sie weiterhin Benutzer manuell im Stackhero-Dashboard definieren. In diesem Fall haben die manuell definierten Benutzer Vorrang.
MQTT-API-Authentifizierung in Node.js
Um zu demonstrieren, wie die externe API-Authentifizierung in der Praxis funktioniert, haben wir einen Beispiel-API-Server in Node.js erstellt. Sie können das vollständige Repository hier erkunden: https://github.com/stackhero-io/mosquittoGettingStarted.
MQTT-API-Authentifizierung mit Node-RED
Stackhero für Node-RED enthält einen Mosquitto-Server. Dennoch wird für die erweiterte Nutzung ein eigenständiger Mosquitto-Dienst empfohlen. Dieses Beispiel zeigt, wie das API-Authentifizierungssystem mit einem eigenständigen Mosquitto-Dienst und einem Node-RED-Dienst verwendet wird. Wenn Sie den mit Ihrem Node-RED enthaltenen Mosquitto-Dienst verwenden, gilt dieser Leitfaden nicht für Sie.
Stackhero für Node-RED bietet ein Beispiel für eine MQTT-API-Verbindung im Flow namens "MQTT authentication". Dieser Flow wird auch mit dem integrierten Mosquitto-Server in Stackhero für Node-RED verwendet.
Mosquitto konfigurieren, um Node-RED als Authentifizierungs-API zu verwenden
Um Node-RED als API-Authentifizierungspunkt zu verwenden, aktualisieren Sie Ihre Mosquitto-Konfiguration wie folgt:
- Aktivieren Sie die Option
API authentication. - Setzen Sie das Feld
Hostauf Ihre Node-RED-Domain. - Wählen Sie
HTTPSalsProtocolund geben Sie443für denPortein. - Geben Sie die
User routeals/mqttAuthentication/userGetan. - Geben Sie die
ACLs routeals/mqttAuthentication/aclCheckan.
Für das Debugging können Sie die "Authentication cache time" auf 1 Sekunde setzen. Sobald Ihre Einrichtung reibungslos funktioniert, wird ein Wert von 30 Sekunden empfohlen.
Beispiel für Mosquitto-Konfiguration
Node-RED als MQTT-Authentifizierungs-API konfigurieren
Nachdem Sie die Mosquitto-Konfiguration aktualisiert haben, starten Sie Node-RED und öffnen Sie den MQTT authentication-Flow. Bearbeiten Sie den Users-Knoten, um Ihre Benutzeranmeldedaten zu konfigurieren. Die bereitgestellten Beispiele enthalten mehrere Kombinationen von Benutzernamen und Passwörtern. Fügen Sie nach Bedarf so viele Benutzer hinzu.
Node-RED MQTT-Authentifizierungs-Flow