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.
Como funciona a autenticação API MQTT
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:
- acesso de leitura (1)
- acesso de escrita (2)
- acesso de leitura e escrita (3)
- 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.
Autenticação API MQTT em Node.js
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.
Autenticação API MQTT com Node-RED
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.
Configurar o Mosquitto para usar o Node-RED como API de autenticação
Para usar o Node-RED como ponto final de autenticação API, atualize a sua configuração Mosquitto da seguinte forma:
- Ative a opção
API authentication. - Defina o campo
Hostpara o seu domínio Node-RED. - Escolha
HTTPScomoProtocole insira443para oPort. - Especifique a
User routecomo/mqttAuthentication/userGet. - Especifique a
ACLs routecomo/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 Mosquitto
Configurar o Node-RED como API de autenticação MQTT
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-RED