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¶
Resposta com token expirado¶
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
/loginsao 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