Mosquitto: Autenticazione API

Come autenticare migliaia di dispositivi utilizzando un'API esterna

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Mosquitto MQTT cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Scambi e trasferimenti illimitati di messaggi.
  • Autenticazione illimitata dei dispositivi tramite un'API esterna.
  • ACL avanzate su argomenti, utenti e azioni.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://mqtt.your-company.com).
  • Aggiornamenti semplificati con un solo clic.
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmiate tempo e semplificate la vostra vita: bastano 5 minuti per provare la soluzione Mosquitto MQTT cloud hosting di Stackhero!

Quando si tratta di autenticazione dei dispositivi, ci sono due approcci principali. È possibile utilizzare un metodo semplice oppure delegare l'autenticazione a un'API esterna.

Il metodo più semplice funziona bene se si hanno meno di 20 dispositivi e non si richiedono controlli ACL avanzati. In questo caso, è possibile creare un login e una password individuali per ciascun dispositivo nella configurazione del servizio sulla dashboard di Stackhero.

In alternativa, è possibile delegare l'autenticazione a un'API esterna. Questo approccio offre una gestione dinamica delle credenziali e consente di implementare ACL robuste. Le ACL (Access Control Lists) permettono di definire permessi precisi per pubblicare o sottoscrivere argomenti specifici per ciascun utente.

L'uso dell'autenticazione API esterna è particolarmente utile quando si hanno più di 20 dispositivi IoT o quando è necessaria una gestione dettagliata delle ACL degli argomenti.

Quando un dispositivo si connette a MQTT, Mosquitto invia una richiesta HTTP POST alla tua API. La richiesta include un payload JSON contenente il nome utente e la password del dispositivo. Se la tua API restituisce un codice di stato HTTP 200, il dispositivo è autorizzato. Qualsiasi codice di stato diverso da 200 (come 401) comporta il rifiuto dell'accesso al dispositivo.

Durante la validazione delle ACL, vengono trasmessi quattro parametri: username, clientid, topic e acc. La tua API deve verificare che l'username sia autorizzato a eseguire l'operazione definita da acc sull'topic. Il parametro acc è definito come segue:

  1. accesso in lettura (1)
  2. accesso in scrittura (2)
  3. accesso in lettura e scrittura (3)
  4. accesso alla sottoscrizione (4)

Ad esempio, se l'utente userA tenta di sottoscrivere l'argomento sensors/temperatures, la tua API riceverà il seguente JSON:

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

Quando si utilizza l'autenticazione utente tramite un'API, è comunque possibile definire manualmente gli utenti nella dashboard di Stackhero. In tal caso, gli utenti definiti manualmente avranno la priorità.

Per dimostrare come funziona l'autenticazione API esterna nella pratica, abbiamo creato un server API di esempio utilizzando Node.js. Puoi esplorare il repository completo qui: https://github.com/stackhero-io/mosquittoGettingStarted.

Stackhero per Node-RED include un server Mosquitto. Tuttavia, per un uso avanzato, è consigliato avere un servizio Mosquitto autonomo. Questo esempio mostra come utilizzare il sistema di autenticazione API con un servizio Mosquitto autonomo e un servizio Node-RED. Se utilizzi il servizio Mosquitto incluso con il tuo Node-RED, questa guida non si applica a te.

Stackhero per Node-RED fornisce un esempio di connessione API MQTT nel flusso denominato "MQTT authentication". Questo flusso è utilizzato anche con il server Mosquitto integrato in Stackhero per Node-RED.

Per utilizzare Node-RED come endpoint di autenticazione API, aggiorna la configurazione di Mosquitto come segue:

  1. Abilita l'opzione API authentication.
  2. Imposta il campo Host sul tuo dominio Node-RED.
  3. Scegli HTTPS come Protocol e inserisci 443 per il Port.
  4. Specifica la User route come /mqttAuthentication/userGet.
  5. Specifica la ACLs route come /mqttAuthentication/aclCheck.

Per il debug, potresti impostare il "Authentication cache time" a 1 secondo. Una volta che la tua configurazione è operativa, il valore consigliato è di 30 secondi.

Esempio di configurazione MosquittoEsempio di configurazione Mosquitto

Dopo aver aggiornato la configurazione di Mosquitto, avvia Node-RED e apri il flusso MQTT authentication. Modifica il nodo Users per configurare le tue credenziali utente. Gli esempi forniti includono diverse combinazioni di nomi utente e password. Sentiti libero di aggiungere quanti utenti siano necessari.

Flusso di autenticazione MQTT Node-REDFlusso di autenticazione MQTT Node-RED