Mosquitto: Autenticação API

Como autenticar milhares de dispositivos usando uma API externa

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Mosquitto MQTT cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Trocas e transferências de mensagens ilimitadas.
  • Autenticação de dispositivos ilimitada via uma API externa.
  • ACLs avançadas em tópicos, utilizadores e ações.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://mqtt.sua-empresa.com).
  • Atualizações simplificadas com apenas um clique.
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: leva apenas 5 minutos para experimentar a solução de Mosquitto MQTT cloud hosting da Stackhero!

Quando se trata de autenticação de dispositivos, tem duas abordagens principais. Pode usar um método simples ou delegar a autenticação a uma API externa.

O método mais simples funciona bem se tiver menos de 20 dispositivos e não precisar de controlos ACL avançados. Neste caso, pode criar um login e uma palavra-passe individual para cada dispositivo na configuração do seu serviço no painel de controlo do Stackhero.

Alternativamente, pode delegar a autenticação a uma API externa. Esta abordagem oferece gestão dinâmica de credenciais e permite implementar ACLs robustas. As ACLs (Listas de Controlo de Acesso) permitem definir permissões precisas para publicar ou subscrever tópicos específicos para cada utilizador.

Usar a autenticação API externa é particularmente útil quando tem mais de 20 dispositivos IoT ou quando precisa de uma gestão detalhada de ACLs de tópicos.

Quando um dispositivo se conecta ao MQTT, o Mosquitto envia um pedido HTTP POST à sua API. O pedido inclui um payload JSON contendo o nome de utilizador e a palavra-passe do dispositivo. Se a sua API retornar um código de estado HTTP 200, o dispositivo é autorizado. Qualquer código de estado diferente de 200 (como 401) resulta na negação de acesso ao dispositivo.

Durante a validação das ACLs, quatro parâmetros são transmitidos: username, clientid, topic e acc. A sua API deve verificar se o username está autorizado a realizar a operação definida por acc no topic. O parâmetro acc é definido da seguinte forma:

  1. acesso de leitura (1)
  2. acesso de escrita (2)
  3. acesso de leitura e escrita (3)
  4. acesso de subscrição (4)

Por exemplo, se o utilizador userA tentar subscrever o tópico sensors/temperatures, a sua API receberá o seguinte JSON:

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

Quando utiliza a autenticação de utilizador via uma API, ainda pode definir utilizadores manualmente no painel de controlo do Stackhero. Nesse caso, os utilizadores definidos manualmente terão prioridade.

Para demonstrar como funciona a autenticação API externa na prática, criámos um servidor API de exemplo em Node.js. Pode explorar o repositório completo aqui: https://github.com/stackhero-io/mosquittoGettingStarted.

O Stackhero para Node-RED inclui um servidor Mosquitto. No entanto, para uso avançado, é recomendado ter um serviço Mosquitto autónomo. Este exemplo mostra como usar o sistema de autenticação API com um serviço Mosquitto autónomo e um serviço Node-RED. Se usar o serviço Mosquitto incluído com o seu Node-RED, este guia não se aplica a si.

O Stackhero para Node-RED fornece um exemplo de conexão API MQTT no fluxo chamado "MQTT authentication". Este fluxo também é usado com o servidor Mosquitto integrado no Stackhero para Node-RED.

Para usar o Node-RED como ponto final de autenticação API, atualize a sua configuração Mosquitto da seguinte forma:

  1. Ative a opção API authentication.
  2. Defina o campo Host para o seu domínio Node-RED.
  3. Escolha HTTPS como Protocol e insira 443 para o Port.
  4. Especifique a User route como /mqttAuthentication/userGet.
  5. Especifique a ACLs route como /mqttAuthentication/aclCheck.

Para depuração, pode definir o "Authentication cache time" para 1 segundo. Uma vez que a sua configuração esteja a funcionar sem problemas, o valor recomendado é 30 segundos.

Exemplo de configuração MosquittoExemplo de configuração Mosquitto

Após atualizar a configuração Mosquitto, inicie o Node-RED e abra o fluxo MQTT authentication. Edite o nó Users para configurar as suas credenciais de utilizador. Os exemplos fornecidos incluem várias combinações de nomes de utilizador e palavras-passe. Sinta-se à vontade para adicionar quantos utilizadores forem necessários.

Fluxo de autenticação MQTT Node-REDFluxo de autenticação MQTT Node-RED