Documentação técnica • Autor: Leonardo Norbiato - Equipe de Engenharia
Cliente: Aster Technology / UVA
Última Atualização: 15/09/2025
Autores: Leonardo Norbiato - Equipe de Engenharia
1. OBJETIVO DO REPOSITÓRIO
Este documento consolida as informações técnicas e de arquitetura do projeto "microservice-auth", um microserviço desenvolvido em Go que gerencia autenticação, autorização e controle de acesso baseado em perfis e permissões. O serviço implementa JWT com access/refresh tokens, sistema de roles/perfis (RBAC), multi-tenancy, rate limiting, recuperação de senha e integração com Redis para cache de tokens. Atua como serviço central de autenticação para todo o ecossistema Aster/UVA, fornecendo controle granular de permissões por módulo, rota e método HTTP.
2. ÚLTIMA REVISÃO
- 15/09/2025 - Revisão e atualização da documentação (Equipe)
3. TECNOLOGIAS UTILIZADAS
- Backend
- Go 1.22.0, Gin v1.10.0 (HTTP framework), GORM v1.25.12 (ORM)
- PostgreSQL (driver: gorm.io/driver/postgres v1.5.11)
- JWT (golang-jwt/jwt/v5 v5.2.1), Redis (go-redis/v9 v9.0.4)
- Swagger (swaggo/gin-swagger v1.6.0, swaggo/swag v1.16.4)
- Rate limiting (ulule/limiter/v3 v3.11.2), Logging (sirupsen/logrus v1.9.3)
- UUID (google/uuid v1.6.0), Validação (go-playground/validator/v10 v10.23.0)
- Configuração (joho/godotenv v1.5.1), Testes (stretchr/testify v1.10.0)
- Repositórios: GitHub (aster-technology/microservice-auth)
- Frontend
- Não aplicável (API pura)
- Banco de Dados
- PostgreSQL 13 (principal), Redis (cache de tokens e sessões)
- Ferramentas de Conexão e Infraestrutura
- Docker Compose (PostgreSQL + Redis + App), Nginx (preparado), SSL/TLS (preparado)
- Rede compartilhada: astor_shared_network
4. FUNCIONALIDADES E DOMÍNIOS
Domínios Principais:
- Autenticação: Login, registro, renovação de tokens, recuperação de senha
- Autorização: Controle de acesso baseado em perfis (RBAC) e permissões granulares
- Gestão de Usuários: CRUD completo, atribuição de perfis, controle de status
- Gestão de Perfis: Criação, edição e exclusão de roles/perfis
- Gestão de Módulos: Organização do sistema em módulos (Financeiro, Comercial, etc.)
- Gestão de Permissões: Controle granular por rota, método HTTP e grupo
- Multi-tenancy: Isolamento de dados por tenant
- Impersonação: Super administradores podem se passar por outros usuários
Funcionalidades Técnicas:
- Sistema de autenticação JWT com access/refresh tokens
- Rate limiting (5 requisições por minuto por IP)
- Validação de status (ativo, inadimplente, cancelado)
- Cache de permissões no Redis (preparado)
- Documentação automática via Swagger
- Seeds automatizados para dados iniciais
- Middleware de autenticação e autorização
- Validação rigorosa de dados de entrada
5. ARQUITETURA FRONTEND
- Não aplicável (API pura)
- Documentação disponível via Swagger UI em /swagger/*any
- Endpoints RESTful para integração com frontends
6. ARQUITETURA BACKEND
Controllers/Handlers:
- LoginHandler: Autenticação com validação de status do usuário
- RegisterUserHandler: Registro com perfis e permissões
- RefreshTokenHandler: Renovação de tokens
- ForgotPasswordHandler/ResetPasswordHandler: Recuperação de senha
- UserHandler: CRUD de usuários
- ProfileHandler: Gestão de perfis/roles
- PermissionHandler: Gestão de permissões
- ModuleHandler: Gestão de módulos do sistema
- ImpersonateHandler: Impersonação (super admin)
Repositories:
- UserRepository: Gestão de usuários
- ProfileRepository: Gestão de perfis
- PermissionRepository: Gestão de permissões
- ModuleRepository: Gestão de módulos
- PasswordResetTokenRepository: Tokens de reset
- ProfilePermissionRepository: Relacionamento perfis-permissões
Entities:
- User: Dados do usuário (ID, username, email, status, tenant, roles)
- Profile: Perfis/roles do sistema
- UserProfile: Relacionamento N:N usuário-perfil
- Module: Módulos do sistema (Financeiro, Comercial, etc.)
- Permission: Permissões granulares (rota, método, grupo)
- ProfilePermission: Permissões por perfil
- UserPermission: Permissões individuais do usuário
- PasswordResetToken: Tokens para reset de senha
Helper/Utilities:
- AuthMiddleware: Validação JWT e extração de claims
- RoleMiddleware: Validação de roles específicas
- InadimplencyMiddleware: Controle de inadimplência
- TokenHelper: Geração e validação de tokens
- StringUtils: Utilitários de string
7. ROTAS E ENDPOINTS
Rotas Públicas:
- POST /register - Registro de usuário
- POST /login - Autenticação
- POST /refresh-token - Renovação de token
- POST /forgot-password - Solicitação de reset
- POST /reset-password - Reset de senha
- DELETE /users/:id - Exclusão de usuário
- PATCH /users/:id - Atualização de usuário
- GET /users/:id - Busca de usuário
Rotas Autenticadas (JWT):
- GET /users/:id/all-permissions - Todas as permissões do usuário
- GET /users - Lista de usuários
- POST /users/:id/profiles - Adicionar perfil ao usuário
- DELETE /users/:id/profiles/:profile_id - Remover perfil do usuário
Gestão de Perfis:
- GET /profiles - Listar perfis
- POST /profiles - Criar perfil
- GET /profiles/:id - Buscar perfil
- PUT /profiles/:id - Atualizar perfil
- DELETE /profiles/:id - Excluir perfil
Gestão de Módulos:
- POST /modules - Criar módulo
- GET /permissions - Listar módulos e permissões
- GET /modules/:id - Buscar módulo
- PUT /modules/:id - Atualizar módulo
- DELETE /modules/:id - Excluir módulo
Gestão de Permissões:
- POST /permissions - Criar permissão
- GET /all-permissions - Listar todas as permissões
- GET /permissions/:id - Buscar permissão
- PUT /permissions/:id - Atualizar permissão
- DELETE /permissions/:id - Excluir permissão
Rotas Super Admin:
- POST /impersonate - Impersonação de usuário
Documentação:
- GET /swagger/*any - Swagger UI
8. ESTRUTURA DE DADOS, TABELAS E VIEWS
- users:
- id (string, PK), username, email (unique), password_hash, plan, is_active, is_delinquent, is_admin, is_super_admin, is_owner, canceled, tenant_id, created_at, updated_at
- profiles:
- id (uint, PK), name (unique), created_at, updated_at
- user_profiles:
- user_id (string, PK), profile_id (uint, PK) - Relacionamento N:N entre users e profiles
- modules:
- id (uint, PK), name (unique), route, created_at, updated_at
- permissions:
- id (uint, PK), module_id, label, slug (unique), route, method, group, group_name, dependencies, created_at, updated_at
- profile_permissions:
- id (uint, PK), profile_id, permission_id, allowed, created_at, updated_at
- user_permissions:
- id (uint, PK), user_id, permission_id, allowed, created_at, updated_at
- password_reset_tokens:
- id (uint, PK), user_id, token, expires_at, created_at
9. CONFIGURAÇÃO E VARIÁVEIS
Arquivo principal: docker-compose.yml
Variáveis principais:
- SERVER_ADDRESS: :8085 (porta do serviço)
- DB_HOST: localhost (PostgreSQL)
- DB_PORT: 5432
- DB_USER: postgres
- DB_PASSWORD: postgres
- DB_NAME: authdb
- DB_SSLMODE: disable
- JWT_SECRET_KEY: your-secret-key
- JWT_TOKEN_EXPIRY: 15 (minutos)
- JWT_REFRESH_EXPIRY: 168 (horas - 7 dias)
- REDIS_HOST: redis
- REDIS_PORT: 6379
- REDIS_USER: jwt_writer
- REDIS_PASSWORD: WriterPass
- REDIS_DB: 0
Configurações Docker:
- PostgreSQL: porta 5432, database "authdb"
- Redis: porta 6379, database 0
- App: porta 8085
- Rede compartilhada: astor_shared_network
10. TREEVIEW DA ARQUITETURA
microservice-auth/
├── cmd/
│ └── auth-service/
│ └── main.go # Ponto de entrada da aplicação
├── internal/
│ ├── adapters/
│ │ ├── handlers/ # Handlers HTTP (13 arquivos)
│ │ │ ├── login_handler.go # Autenticação
│ │ │ ├── register_handler.go # Registro de usuários
│ │ │ ├── refresh_token_handler.go # Renovação de tokens
│ │ │ ├── forgot_password_handler.go # Solicitação de reset
│ │ │ ├── reset_password_handler.go # Reset de senha
│ │ │ ├── user_handler.go # CRUD de usuários
│ │ │ ├── profile_handler.go # Gestão de perfis
│ │ │ ├── permission_handler.go # Gestão de permissões
│ │ │ ├── module_handler.go # Gestão de módulos
│ │ │ ├── impersonate_handler.go # Impersonação
│ │ │ ├── routes.go # Configuração de rotas
│ │ │ ├── token_helper.go # Utilitários de token
│ │ │ └── permission_helper.go # Utilitários de permissão
│ │ ├── repositories/ # Implementações de repositórios (6 arquivos)
│ │ │ ├── user_repository_impl.go
│ │ │ ├── profile_repository_impl.go
│ │ │ ├── permission_repository_impl.go
│ │ │ ├── module_repository_impl.go
│ │ │ ├── password_reset_token_repository_impl.go
│ │ │ └── profile_permission_repository_impl.go
│ │ └── seeds/ # Seeds de dados iniciais
│ │ ├── executor.go # Executor de seeds
│ │ ├── clean_data/clean.go # Limpeza de dados
│ │ ├── modules_permissions/ # Seeds de módulos e permissões
│ │ └── profiles/ # Seeds de perfis
│ ├── config/
│ │ └── config.go # Configuração da aplicação
│ ├── domain/
│ │ ├── entities/ # Entidades de domínio (3 arquivos)
│ │ │ ├── user.go # Entidade User
│ │ │ ├── permission_entities.go # Entidades de permissões
│ │ │ └── password_reset_token.go # Token de reset
│ │ ├── interfaces/ # Interfaces de repositórios
│ │ │ └── interfaces.go
│ │ └── models/ # Modelos de dados (4 arquivos)
│ │ ├── user_models.go
│ │ ├── permission_models.go
│ │ ├── profile_permission_models.go
│ │ └── module_models.go
│ ├── usecases/ # Casos de uso (10 arquivos)
│ │ ├── authenticate_user.go # Autenticação
│ │ ├── register_user.go # Registro
│ │ ├── update_user.go # Atualização
│ │ ├── delete_user.go # Exclusão
│ │ ├── impersonate.go # Impersonação
│ │ ├── request_password_reset.go # Solicitação de reset
│ │ ├── reset_password.go # Reset de senha
│ │ ├── create_profile.go # Criação de perfil
│ │ ├── get_modules_and_profiles.go # Busca de módulos
│ │ └── user_permissions.go # Permissões do usuário
│ └── utils/
│ └── string_utils.go # Utilitários de string
├── pkg/
│ └── middleware/ # Middlewares (3 arquivos)
│ ├── auth_middleware.go # Middleware de autenticação
│ ├── role_middleware.go # Middleware de roles
│ └── inadimplency_middleware.go # Middleware de inadimplência
├── docs/ # Documentação Swagger
│ ├── docs.go
│ ├── swagger.json
│ └── swagger.yaml
├── docker-compose.yml # Orquestração de serviços
├── Dockerfile # Build da aplicação
├── nginx.conf # Configuração Nginx
├── nginx.Dockerfile # Build Nginx
├── go.mod # Dependências Go
├── go.sum # Checksums das dependências
└── README.md # Documentação do projeto
11. INTEGRAÇÕES E DEPENDÊNCIAS
Serviços externos:
- PostgreSQL (banco de dados principal)
- Redis (cache de tokens e sessões)
- Nginx (proxy reverso - preparado)
Dependências principais:
- gin-gonic/gin (framework HTTP)
- gorm.io/gorm (ORM)
- gorm.io/driver/postgres (driver PostgreSQL)
- redis/go-redis/v9 (cliente Redis)
- golang-jwt/jwt/v5 (JWT)
- swaggo/gin-swagger (documentação Swagger)
- ulule/limiter/v3 (rate limiting)
- sirupsen/logrus (logging)
- google/uuid (geração de UUIDs)
- go-playground/validator/v10 (validação)
12. INTEGRAÇÕES EXTERNAS
- PostgreSQL: Banco de dados principal para persistência
- Redis: Cache de tokens e sessões (preparado)
- Nginx: Proxy reverso e SSL/TLS (preparado)
- Swagger: Documentação automática da API
- Docker: Containerização e orquestração
13. CONTROLE DE VERSÃO
- Repositório: GitHub (aster-technology/microservice-auth)
- Versionamento semântico recomendado
- Docker multi-stage build
- Docker Compose para desenvolvimento
- Seeds automatizados para dados iniciais
14. SEGURANÇA E ACESSO
- Autenticação via JWT com access/refresh tokens
- Controle de acesso baseado em perfis (RBAC)
- Rate limiting para proteção contra ataques
- Validação rigorosa de dados de entrada
- Hash seguro de senhas
- Middleware de controle de inadimplência
- Impersonação controlada para super administradores
- Multi-tenancy com isolamento por tenant
- Headers de segurança configurados
- SSL/TLS preparado via Nginx
15. CONSIDERAÇÕES FINAIS
O microservice-auth é um microserviço robusto e bem estruturado em Go que implementa um sistema completo de autenticação e autorização. Oferece controle de acesso baseado em perfis (RBAC), sistema de permissões granulares, multi-tenancy e integração com Redis para cache.
Principais pontos fortes:
- Arquitetura limpa com separação clara de responsabilidades
- Sistema de permissões flexível e granular
- Multi-tenancy nativo
- Rate limiting e controles de segurança
- Documentação automática via Swagger
- Seeds automatizados para configuração inicial
O serviço está preparado para produção e integração com o ecossistema de microserviços Aster/UVA, fornecendo autenticação e autorização centralizadas para todos os outros serviços.