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

  1. Usuário envia email + senha e opcionalmente app_id e empresa_id.
  2. 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.
  3. Senha é validada via bcrypt.compare.
  4. Em caso de sucesso:
    • Gera Access Token (curta duração).
    • Gera Refresh Token, salva o hash em sessions.
  5. Qualquer tentativa (sucesso ou erro) gera linha em login_audit_logs.
  6. 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.