Pular para conteúdo

Autenticacao

O Oraculo utiliza JWT (JSON Web Token) para autenticacao, implementado na Platform API com Spring Security.

Visao Geral

sequenceDiagram
    participant U as Usuario/Frontend
    participant PA as Platform API
    participant DB as PostgreSQL

    U->>PA: POST /auth/login {email, password}
    PA->>DB: Busca usuario por email
    DB-->>PA: Usuario encontrado
    PA->>PA: Valida senha (bcrypt)
    PA->>PA: Gera JWT (HS512)
    PA-->>U: {token, userId, email, name}

    Note over U: Armazena token

    U->>PA: GET /api/datasources<br/>Authorization: Bearer {token}
    PA->>PA: JwtAuthenticationFilter valida token
    PA->>PA: Extrai userId dos claims
    PA-->>U: Lista de datasources

Configuracao JWT

Propriedade Valor
Algoritmo HS512
Expiracao 24 horas (86.400.000 ms)
Header Authorization: Bearer {token}
Claims sub (userId), email, iat, exp

Endpoints Publicos

Estes endpoints nao requerem autenticacao:

Metodo Endpoint Descricao
POST /auth/login Login
POST /auth/register Registro
POST /auth/admin/reset-password Reset de senha (requer adminKey)
GET /actuator/health Health check
GET /actuator/prometheus Metricas
GET /swagger-ui.html Swagger UI
GET /v3/api-docs OpenAPI JSON

Endpoints Protegidos

Todos os endpoints /api/* requerem autenticacao:

curl -X GET http://localhost:8085/api/datasources \
  -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9..."

Resposta sem token ou token invalido

// HTTP 401 Unauthorized
{
  "status": 401,
  "message": "Unauthorized"
}

Resposta com token expirado

// HTTP 401 Unauthorized
{
  "status": 401,
  "message": "Token expired"
}

Fluxo no Frontend (NextAuth.js)

O frontend Next.js utiliza NextAuth v5 com Credentials Provider:

sequenceDiagram
    participant B as Browser
    participant FE as Next.js Frontend
    participant NA as NextAuth
    participant PA as Platform API

    B->>FE: Acessa /login
    B->>FE: Submete email/senha
    FE->>NA: signIn("credentials", {email, password})
    NA->>PA: POST /auth/login
    PA-->>NA: {token, userId, email, name}
    NA->>NA: Cria sessao JWT do NextAuth
    NA-->>FE: Sessao criada
    FE-->>B: Redireciona para /datasource

    Note over B,NA: Sessao armazenada como cookie

    B->>FE: Acessa /datasource
    FE->>NA: getSession()
    NA-->>FE: {user, token}
    FE->>PA: GET /api/datasources<br/>Authorization: Bearer {token}
    PA-->>FE: Dados
    FE-->>B: Renderiza pagina

Middleware de Protecao de Rotas

O frontend possui middleware que protege rotas:

  • Rotas publicas: /, /login, /register
  • Rotas protegidas: Todas as demais (requerem sessao)
  • Usuarios autenticados acessando /login sao redirecionados para /datasource
  • Usuarios nao autenticados sao redirecionados para /

Seguranca entre Servicos

Servico Autenticacao Motivo
Platform API JWT obrigatorio API publica para o frontend
Tracker API Nenhuma Recebe eventos do SDK (publico)
Models API Nenhuma Chamada internamente pela Tracker API

Producao

Em producao, considere:

  • Alterar o JWT secret (nao usar o default)
  • Alterar o NextAuth secret
  • Adicionar autenticacao entre servicos internos (mTLS ou API keys)
  • Configurar CORS restritivo na Tracker API
  • Habilitar HTTPS em todos os servicos