Skip to main content

Visão geral

O OmniDom usa JWT via cookies HttpOnly para autenticação. O fluxo é:
  1. POST /auth/login → recebe accessToken e refreshToken em cookies.
  2. Todas as requisições protegidas enviam os cookies automaticamente.
  3. Quando o accessToken expira, use POST /auth/refresh para renová-lo.
  4. POST /auth/logout invalida a sessão no servidor e limpa os cookies.
Os cookies são HttpOnly e Secure. Você não precisa (e não consegue) lê-los via JavaScript no frontend — o navegador os envia automaticamente.

Endpoints

Registrar usuário

POST /auth/register
Content-Type: application/json
Body:
{
  "name": "João Silva",
  "email": "joao@empresa.com",
  "password": "MinhaS3nha!",
  "tenantId": "uuid-do-tenant"
}
Resposta 200: Usuário criado. Os cookies accessToken e refreshToken são definidos.

Login

POST /auth/login
Content-Type: application/json
Body:
{
  "email": "joao@empresa.com",
  "password": "MinhaS3nha!",
  "rememberMe": false
}
CampoTipoDescrição
emailstringE-mail cadastrado
passwordstringSenha do usuário
rememberMebooleanSe true, o refresh token tem validade estendida
Resposta 200:
{
  "user": {
    "id": "uuid",
    "name": "João Silva",
    "email": "joao@empresa.com",
    "tenantId": "uuid-do-tenant"
  }
}
Os cookies accessToken e refreshToken são definidos na resposta.

Dados do usuário autenticado

GET /auth/me
Requer cookie accessToken válido. Resposta 200:
{
  "id": "uuid",
  "name": "João Silva",
  "email": "joao@empresa.com",
  "tenantId": "uuid-do-tenant"
}

Renovar token de acesso

POST /auth/refresh
Usa o cookie refreshToken para emitir um novo accessToken. Resposta 200: Novo cookie accessToken definido. Erro 401: Refresh token ausente ou inválido.

Logout

POST /auth/logout
Requer cookie accessToken válido. Invalida a sessão no servidor e limpa ambos os cookies. Resposta 200:
{ "message": "Logout realizado com sucesso" }

Gestão de sessões

Listar sessões ativas

GET /auth/sessions
Rate limit: 10 requisições por minuto. Retorna todas as sessões ativas do usuário no tenant atual.

Revogar uma sessão

POST /auth/sessions/:id/revoke
ParâmetroTipoDescrição
idUUIDID da sessão a revogar
Rate limit: 10 requisições por minuto.

Recuperação de senha

Solicitar redefinição

POST /auth/forgot-password
Content-Type: application/json
Rate limit: 3 requisições por hora por IP. Body:
{ "email": "joao@empresa.com" }
Um e-mail com link de redefinição é enviado se o endereço existir no sistema.

Redefinir senha

POST /auth/reset-password
Content-Type: application/json
Body:
{
  "token": "token-recebido-por-email",
  "newPassword": "NovaSenha@123"
}

Estrutura do JWT

O accessToken contém os seguintes campos no payload:
CampoDescrição
subID do usuário
tenantIdID do tenant
sessionIdID da sessão (para revogação)
jtiJWT ID (para blacklist/revogação)
Não use o campo tenantId do lado do cliente para lógica de autorização. O backend valida o tenant em cada requisição via TenantGuard.