Mosquitto: Uwierzytelnianie API

Jak uwierzytelnić tysiące urządzeń za pomocą zewnętrznego API

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Mosquitto MQTT cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczoną wymianę i transfer wiadomości.
  • Nieograniczoną autoryzację urządzeń za pomocą zewnętrznego API.
  • Zaawansowane ACL na tematy, użytkowników i działania.
  • Dostosowywalną nazwę domeny zabezpieczoną za pomocą HTTPS (na przykład, https://mqtt.twoja-firma.com).
  • Łatwe aktualizacje za pomocą jednego kliknięcia.
  • Optymalną wydajność i solidne bezpieczeństwo dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Mosquitto MQTT cloud hosting Stackhero!

Jeśli chodzi o uwierzytelnianie urządzeń, masz dwa główne podejścia. Możesz użyć prostej metody lub delegować uwierzytelnianie do zewnętrznego API.

Najprostsza metoda działa dobrze, jeśli masz mniej niż 20 urządzeń i nie potrzebujesz zaawansowanej kontroli ACL. W takim przypadku możesz utworzyć indywidualny login i hasło dla każdego urządzenia w konfiguracji usługi na pulpicie Stackhero.

Alternatywnie, możesz delegować uwierzytelnianie do zewnętrznego API. To podejście oferuje dynamiczne zarządzanie poświadczeniami i pozwala na wdrożenie solidnych ACL. ACL (Listy Kontroli Dostępu) pozwalają na definiowanie precyzyjnych uprawnień do publikowania lub subskrybowania określonych tematów dla każdego użytkownika.

Użycie zewnętrznego uwierzytelniania API jest szczególnie przydatne, gdy masz więcej niż 20 urządzeń IoT lub potrzebujesz szczegółowego zarządzania ACL tematów.

Gdy urządzenie łączy się z MQTT, Mosquitto wysyła żądanie HTTP POST do Twojego API. Żądanie zawiera ładunek JSON z nazwą użytkownika i hasłem urządzenia. Jeśli Twoje API zwróci kod statusu HTTP 200, urządzenie jest autoryzowane. Każdy inny kod statusu niż 200 (np. 401) skutkuje odmową dostępu dla urządzenia.

Podczas walidacji ACL przesyłane są cztery parametry: username, clientid, topic i acc. Twoje API powinno zweryfikować, czy username ma pozwolenie na wykonanie operacji zdefiniowanej przez acc na topic. Parametr acc jest zdefiniowany w następujący sposób:

  1. dostęp do odczytu (1)
  2. dostęp do zapisu (2)
  3. dostęp do odczytu i zapisu (3)
  4. dostęp do subskrypcji (4)

Na przykład, jeśli użytkownik userA próbuje zasubskrybować temat sensors/temperatures, Twoje API otrzyma następujący JSON:

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

Gdy używasz uwierzytelniania użytkownika przez API, nadal możesz definiować użytkowników ręcznie na pulpicie Stackhero. W takim przypadku ręcznie zdefiniowani użytkownicy będą mieli priorytet.

Aby pokazać, jak działa zewnętrzne uwierzytelnianie API w praktyce, stworzyliśmy przykładowy serwer API w Node.js. Możesz zapoznać się z pełnym repozytorium tutaj: https://github.com/stackhero-io/mosquittoGettingStarted.

Stackhero dla Node-RED zawiera serwer Mosquitto. Niemniej jednak, dla zaawansowanego użytkowania, zaleca się posiadanie samodzielnej usługi Mosquitto. Ten przykład pokazuje, jak używać systemu uwierzytelniania API z samodzielną usługą Mosquitto i usługą Node-RED. Jeśli używasz usługi Mosquitto dołączonej do Twojego Node-RED, ten przewodnik nie dotyczy Ciebie.

Stackhero dla Node-RED zapewnia przykład połączenia API MQTT w przepływie nazwanym "MQTT authentication". Ten przepływ jest również używany z zintegrowanym serwerem Mosquitto w Stackhero dla Node-RED.

Aby użyć Node-RED jako punktu końcowego uwierzytelniania API, zaktualizuj konfigurację Mosquitto w następujący sposób:

  1. Włącz opcję API authentication.
  2. Ustaw pole Host na swoją domenę Node-RED.
  3. Wybierz HTTPS jako Protocol i wpisz 443 dla Port.
  4. Określ User route jako /mqttAuthentication/userGet.
  5. Określ ACLs route jako /mqttAuthentication/aclCheck.

Do debugowania możesz ustawić "Authentication cache time" na 1 sekundę. Gdy Twoja konfiguracja działa płynnie, zalecana wartość to 30 sekund.

Przykład konfiguracji MosquittoPrzykład konfiguracji Mosquitto

Po zaktualizowaniu konfiguracji Mosquitto uruchom Node-RED i otwórz przepływ MQTT authentication. Edytuj węzeł Users, aby skonfigurować swoje poświadczenia użytkownika. Dostarczone przykłady zawierają kilka kombinacji nazw użytkowników i haseł. Możesz dodać tylu użytkowników, ile potrzebujesz.

Przepływ uwierzytelniania MQTT Node-REDPrzepływ uwierzytelniania MQTT Node-RED