{"id":20341901,"url":"https://github.com/douglaszuqueto/mosquitto-auth-plugin","last_synced_at":"2026-05-01T20:32:02.488Z","repository":{"id":91302834,"uuid":"130776897","full_name":"douglaszuqueto/mosquitto-auth-plugin","owner":"douglaszuqueto","description":"Plugin para Autenticação e Autorização de usuários no Mosquitto integrado ao banco de dados PostgreSQL","archived":false,"fork":false,"pushed_at":"2018-04-27T16:03:10.000Z","size":63,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-27T14:56:26.432Z","etag":null,"topics":["golang","iot","mosquitto","mosquitto-auth-plugin","mqtt","postgresql"],"latest_commit_sha":null,"homepage":"https://github.com/douglaszuqueto/mosquitto-auth-plugin","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/douglaszuqueto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-24T01:14:07.000Z","updated_at":"2025-01-20T19:26:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"10c96d4e-8aab-44cc-8faf-4440de05a7cb","html_url":"https://github.com/douglaszuqueto/mosquitto-auth-plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/douglaszuqueto/mosquitto-auth-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fmosquitto-auth-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fmosquitto-auth-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fmosquitto-auth-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fmosquitto-auth-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/douglaszuqueto","download_url":"https://codeload.github.com/douglaszuqueto/mosquitto-auth-plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Fmosquitto-auth-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32512662,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","iot","mosquitto","mosquitto-auth-plugin","mqtt","postgresql"],"created_at":"2024-11-14T21:29:40.469Z","updated_at":"2026-05-01T20:32:02.467Z","avatar_url":"https://github.com/douglaszuqueto.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mosquitto Auth Plugin - PostgreSQL\n\nPlugin para Autenticação e Autorização de usuários no Mosquitto\n\n## Índice\n\n- [Introdução](#introducao)\n- [Dependências](#dependencias)\n- [Build](#build)\n    - [Standalone](#standalone)\n    - [Docker](#docker)\n- [Configuração](#configuracao)\n    - [Geral](#geral)\n    - [PostgreSQL](#postgresql)\n- [PostgreSQL](#postgresql)\n    - [Instalar](#instalar)\n    - [Configurar](#configurar)\n    - [Estrutura](#estrutura)\n        - [Script](#script)\n- [Integrando](#integrando)\n    - [Exemplo de configuração](#exemplocompleto-de-configuração)\n\n\n## Introdução\n\nEste plugin é originado do projeto [Mosquitto Go Auth](https://github.com/iegomez/mosquitto-go-auth) com uma diferença do mesmo ser adaptado para atender demandas mais especificas em conjunto com o Broker MQTT Mosquitto.\n\n## Dependências\n\nAs depedências serão instaladas de acordo com o cenário que você escolher. Portanto irei me basear na distro **Ubuntu**.\n\nEm resumo você terá 2 dependências principais: \n\n* Go(golang)\n* Ferramentas para compilação\n\n## Build\n\n### Standalone\n\n* Arquitetura X64\n* Arquitetura ARM (Raspberry PI)\n\n### Docker\n\n* Arquitetura X64\n\n## Configuração\n\n### Geral\n\n### PostgreSQL\n\n\n## PostgreSQL\n\nComo o plugin é fortemente atrelado ao Banco de dados, se faz necessário a criação do ecossistema base para funcionamento - \"podendo\" ser adaptado de acordo com o cenário do projeto.\n\n### Instalar\n\nPara começar, você precisa ao mínimo ter o **PostgreSQL** instalado em sua máquina(desktop, docker, raspberry, servidor...). Recomendo também alguma interface gŕafica para manipulação do banco de dados - eu, particularmente estou usando o **PgAdmin4**.\n\n### Configurar\n\nDepois de ter instalado o serviço, não se esqueça de configurar algumas coisas que se faz necessário no postgres.\n\n* Liberar acesso remoto;\n* Definição de senha para o usuário default;\n\n### Estrutura\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/mosquitto-auth-plugin/master/.github/mosquitto-auth-plugin.png)\n\n### Script\n\nNos 2 próximos tópicos será mostrado a estrutura base referente ao que é necessário para o correto funcionamento no que tange a **Atenticação e Autorização** de usuários e seus devidos tópicos.\n\nFica a sua escolha qual **database** utilizar. Você pode colocar dentro do banco que já vem pré-criado - *postgres*, mas também pode criar um de sua preferência ou até mesmo embarcar no mesmo database de seu projeto.\n\nOutra escolha opcional é a questão do **schema** a ser utilizado. Como padrão do postgres deixei no *public*, mas você pode criar um chamado **mqtt** por exemplo - em meu projeto, é esta estrutura que eu sigo. Deixo abaixo a estrutura que pretendo adotar no projeto [controle de acesso](https://github.com/douglaszuqueto/controle-de-acesso)\n\n* Database: controle-de-acesso\n    * Schema: mqtt\n        * Table: user\n        * Table: acl \n\nCaso mude o schema, não esqueça de estar mudando o schema nos scripts abaixo.\n\nDe *CREATE TABLE public.\"user\"* por **CREATE TABLE seu_schema.\"user\"**\n\n#### Tabela user\n\n```sql\n-- Table: public.\"user\"\n\n-- DROP TABLE public.\"user\";\n\nCREATE TABLE public.\"user\"\n(\n    id bigint NOT NULL DEFAULT nextval('test_user_id_seq'::regclass),\n    username character varying(100) COLLATE pg_catalog.\"default\" NOT NULL,\n    password character varying(200) COLLATE pg_catalog.\"default\" NOT NULL,\n    is_admin boolean NOT NULL,\n    CONSTRAINT test_user_pkey PRIMARY KEY (id)\n)\nWITH (\n    OIDS = FALSE\n)\nTABLESPACE pg_default;\n\nALTER TABLE public.\"user\"\n    OWNER to postgres;\n```\n\n#### Tabela ACL\n\n```sql\n-- Table: public.acl\n\n-- DROP TABLE public.acl;\n\nCREATE TABLE public.acl\n(\n    id bigint NOT NULL DEFAULT nextval('test_acl_id_seq'::regclass),\n    topic character varying(200) COLLATE pg_catalog.\"default\" NOT NULL,\n    rw integer NOT NULL,\n    client_id character varying COLLATE pg_catalog.\"default\",\n    state smallint NOT NULL DEFAULT 1,\n    id_user bigint,\n    CONSTRAINT test_acl_pkey PRIMARY KEY (id)\n)\nWITH (\n    OIDS = FALSE\n)\nTABLESPACE pg_default;\n\nALTER TABLE public.acl\n    OWNER to postgres;\n```\n\n## Integrando\n\nPara ocorrer a devida integração, você terá de adicionar algumas linhas no arquivo de configuração do seu broker mosquitto e depois adequar os valores de acordo\ncom o cenário que você possui.\n\nSegue abaixo uma tabela referente a todas opçoes possíveis de configuração:\n\n\n| Option         \t\t| default           |  Mandatory  | Meaning                  |\n| -------------- \t\t| ----------------- | :---------: | ------------------------ |\n| pg_host           | localhost         |             | hostname/address\n| pg_port           | 5432              |             | TCP port\n| pg_user           |                   |     Y       | username\n| pg_password       |                   |     Y       | password\n| pg_dbname         |                   |     Y       | database name\n| pg_userquery      |                   |     Y       | SQL for users\n| pg_superquery     |                   |     N       | SQL for superusers\n| pg_aclquery       |                   |     N       | SQL for ACLs\n| pg_sslmode        |     disable       |     N       | SSL/TLS mode.\n| pg_sslcert        |                   |     N       | SSL/TLS Client Cert.\n| pg_sslkey         |                   |     N       | SSL/TLS Client Cert. Key\n| pg_sslrootcert    |                   |     N       | SSL/TLS Root Cert\n\n**Observação:** Todas opções listadas acima levam o prefixo auth_opt_. Ou seja, cada opção deverá ficar no seginte formato: **auth_opt_pg_host**.\n\n### Exemplo(completo) de configuração\n\n```\n# Configurations\n\nallow_anonymous false\n\nlog_type error\nlog_type warning\nlog_type notice\nlog_type information\nlog_type debug\n\n# MQTT\n\nlistener 1883\n\n# MQTT Websockets\n\nlistener 8083\nprotocol websockets\n\nauth_plugin /mosquitto-auth-plugin/go-auth.so\n\nauth_opt_backends postgres\nauth_opt_log_level debug\n\nauth_opt_pg_host postgres\nauth_opt_pg_port 5432\nauth_opt_pg_dbname controle-de-acesso\nauth_opt_pg_user postgres\nauth_opt_pg_password root\nauth_opt_pg_userquery select password from mqtt.\"user\" where username = $1 limit 1\nauth_opt_pg_superquery select count(*) from mqtt.\"user\" where username = $1 and is_admin = true\nauth_opt_pg_aclquery SELECT a.topic FROM mqtt.\"acl\" a INNER JOIN mqtt.\"user\" u ON u.id = a.id_user WHERE (u.username = $1) AND a.rw \u003e= $2\n\n```\n\n## Referências\n\n* [Mosquitto Auth Plug](https://github.com/jpmens/mosquitto-auth-plug)\n* [Mosquitto Go Auth](https://github.com/iegomez/mosquitto-go-auth)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Fmosquitto-auth-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdouglaszuqueto%2Fmosquitto-auth-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Fmosquitto-auth-plugin/lists"}