Documentação Oficial
Sistema centralizado de autenticação
Introdução
Este documento descreve a arquitetura, banco de dados, fluxos de autenticação e endpoints da API do sistema Auth Global, responsável por unificar o login de todas as aplicações do ecossistema Grupo Max.
Todas as aplicações (portais, painéis, microserviços) devem delegar autenticação para este serviço, consumindo os tokens JWT (access e refresh) emitidos aqui.
Arquivo .env
Exemplo de configuração mínima em produção:
PORT=4000
DATABASE_URL="postgresql://login_global_app:senha@ip:5432/login_global"
JWT_ACCESS_SECRET=uma_senha_muito_secreta_e_grande
JWT_REFRESH_SECRET=outra_senha_bem_secreta_e_grande
JWT_ACCESS_EXPIRES=15m
JWT_REFRESH_EXPIRES_DAYS=30
- PORT: porta do backend (grupo 4000–4999).
- DATABASE_URL: string completa de conexão PostgreSQL.
- JWT_ACCESS_SECRET: segredo do token de acesso (curta duração).
- JWT_REFRESH_SECRET: segredo do token de refresh (longa duração).
Banco de Dados
O banco utiliza PostgreSQL com as extensões pgcrypto e citext.
Tabelas Principais
users
id UUID PK
name TEXT
email CITEXT UNIQUE
password_hash TEXT
is_active BOOLEAN
created_at TIMESTAMPTZ
apps
id UUID PK
name TEXT
slug TEXT UNIQUE
is_active BOOLEAN
created_at TIMESTAMPTZ
empresas
id UUID PK
nome TEXT
cnpj TEXT
is_active BOOLEAN
created_at TIMESTAMPTZ
user_apps
id UUID PK
user_id UUID FK
app_id UUID FK
is_active BOOLEAN
UNIQUE (user_id, app_id)
user_empresas
id UUID PK
user_id UUID FK
empresa_id UUID FK
is_active BOOLEAN
UNIQUE (user_id, empresa_id)
empresa_users
empresa_id UUID FK
user_id UUID FK
role TEXT NULL
is_enabled BOOLEAN
PRIMARY KEY (empresa_id, user_id)
empresa_apps
empresa_id UUID FK
app_id UUID FK
is_enabled BOOLEAN
PRIMARY KEY (empresa_id, app_id)
sessions
id UUID PK
user_id UUID FK
refresh_token_hash TEXT
created_at TIMESTAMPTZ
expires_at TIMESTAMPTZ
revoked_at TIMESTAMPTZ
login_audit_logs
id BIGSERIAL PK
user_id UUID FK NULL
app_id UUID FK NULL
email CITEXT
ip_address INET
user_agent TEXT
success BOOLEAN
message TEXT
created_at TIMESTAMPTZ
Fluxo de Autenticação
- Usuário envia email + senha e opcionalmente
app_ideempresa_id. - API valida:
- Usuário existe e está ativo.
- Empresa (se enviada) existe, está ativa e o usuário está habilitado nela.
- App (se enviado) existe, está ativo e:
- Está habilitado para a empresa (se houver empresa) e
- O usuário tem vínculo ativo com o app.
- Senha é validada via
bcrypt.compare. - Em caso de sucesso:
- Gera Access Token (curta duração).
- Gera Refresh Token, salva o hash em
sessions.
- Qualquer tentativa (sucesso ou erro) gera linha em
login_audit_logs. - Apps validam acesso via header
Authorization: Bearer <ACCESS_TOKEN>.
API – Auth
Rotas responsáveis por registro, login e dados do usuário autenticado.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| POST | /auth/register |
Cria um novo usuário. | - |
| POST | /auth/login |
Realiza login e gera tokens (com validação de empresa/app). | - |
| GET | /auth/me |
Retorna dados do usuário autenticado. | Bearer |
POST /auth/register
Cria um novo usuário a partir de nome, email e senha.
POST /auth/register
Content-Type: application/json
{
"name": "João Silva",
"email": "joao@email.com",
"password": "123456"
}
POST /auth/login
Realiza login e gera accessToken e refreshToken.
Permite informar opcionalmente app_id e empresa_id para validar os vínculos.
POST /auth/login
Content-Type: application/json
{
"email": "joao@email.com",
"password": "123456",
"app_id": "UUID_DO_APP",
"empresa_id": "UUID_DA_EMPRESA"
}
Resposta (exemplo simplificado):
{
"user": {
"id": "UUID_USER",
"name": "João Silva",
"email": "joao@email.com"
},
"empresa_id": "UUID_DA_EMPRESA",
"app_id": "UUID_DO_APP",
"accessToken": "JWT_ACCESS_TOKEN",
"refreshToken": "JWT_REFRESH_TOKEN"
}
GET /auth/me
Retorna os dados do usuário autenticado a partir do token de acesso.
GET /auth/me
Authorization: Bearer JWT_ACCESS_TOKEN
API – Users
Gerenciamento de usuários dentro do Auth Global (apenas rotas autenticadas e, idealmente, restritas a admins).
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| GET | /users |
Lista usuários cadastrados. | Bearer |
| PATCH | /users/:id/status |
Ativa/desativa login do usuário. | Bearer |
API – Apps
Cadastro e controle de status das aplicações que usam o Auth Global.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| POST | /apps |
Cria um novo app. | Bearer |
| GET | /apps |
Lista todos os apps. | Bearer |
| GET | /apps/:id |
Busca um app por ID. | Bearer |
| PATCH | /apps/:id/status |
Ativa/desativa um app. | Bearer |
API – Empresas
Cadastro e ativação de empresas.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| POST | /empresas |
Cria uma nova empresa. | Bearer |
| GET | /empresas |
Lista empresas. | Bearer |
| PATCH | /empresas/:id/status |
Ativa/desativa empresa. | Bearer |
API – Empresa & Usuários
Gerencia o vínculo de usuários a empresas (e roles dentro dela).
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| GET | /empresas/:empresaId/users |
Lista usuários de uma empresa. | Bearer |
| POST | /empresas/:empresaId/users |
Vincula usuário à empresa (com role opcional). | Bearer |
| PATCH | /empresas/:empresaId/users/:userId/status |
Habilita/desabilita vínculo empresa ↔ usuário. | Bearer |
API – Empresa & Apps
Define quais apps estão habilitados para cada empresa.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| GET | /empresas/:empresaId/apps |
Lista apps vinculados a uma empresa. | Bearer |
| POST | /empresas/:empresaId/apps |
Vincula app à empresa (is_enabled = true). | Bearer |
| PATCH | /empresas/:empresaId/apps/:appId/status |
Habilita/desabilita vínculo empresa ↔ app. | Bearer |
API – User & Apps
Controla quais apps um usuário pode acessar diretamente.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| GET | /users/:userId/apps |
Lista apps de um usuário. | Bearer |
| POST | /users/:userId/apps |
Vincula usuário ↔ app (ativa vínculo). | Bearer |
| PATCH | /users/:userId/apps/:appId/status |
Ativa/desativa vínculo usuário ↔ app. | Bearer |
| DELETE | /users/:userId/apps/:appId |
Remove vínculo usuário ↔ app. | Bearer |
API – User & Empresas
Controla em quais empresas o usuário está ativo.
| Método | Caminho | Descrição | Auth |
|---|---|---|---|
| GET | /users/:userId/empresas |
Lista empresas de um usuário. | Bearer |
| POST | /users/:userId/empresas |
Vincula usuário ↔ empresa. | Bearer |
| PATCH | /users/:userId/empresas/:empresaId/status |
Ativa/desativa vínculo usuário ↔ empresa. | Bearer |
| DELETE | /users/:userId/empresas/:empresaId |
Remove vínculo usuário ↔ empresa. | Bearer |
Servidor Node.js
O servidor foi construído com Express, JWT,
bcrypt e pg.
A conexão utiliza process.env.DATABASE_URL diretamente.
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: false // ajustar para produção se necessário
});
As rotas são divididas em módulos (auth, users, apps, empresas, vínculos) e
todas as operações de login são registradas em login_audit_logs.