Visão geral
O OmniDom usa JWT via cookies HttpOnly para autenticação. O fluxo é:
POST /auth/login → recebe accessToken e refreshToken em cookies.
- Todas as requisições protegidas enviam os cookies automaticamente.
- Quando o
accessToken expira, use POST /auth/refresh para renová-lo.
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
}
| Campo | Tipo | Descrição |
|---|
email | string | E-mail cadastrado |
password | string | Senha do usuário |
rememberMe | boolean | Se 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
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
Usa o cookie refreshToken para emitir um novo accessToken.
Resposta 200: Novo cookie accessToken definido.
Erro 401: Refresh token ausente ou inválido.
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
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âmetro | Tipo | Descrição |
|---|
id | UUID | ID 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:
| Campo | Descrição |
|---|
sub | ID do usuário |
tenantId | ID do tenant |
sessionId | ID da sessão (para revogação) |
jti | JWT 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.