Pular para conteúdo

Fase 2 — JWT removido do integrador e revisão de CORS

Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-07-06 · Decidido em: 2026-07-06

Esta fase do plano de migração “integrador v2” (ficheiro de plano no Cursor / documentação interna do time) tem dois eixos: confirmar que não há geração de JWT neste JAR (entregue na Fase 1) e alinhar CORS para clientes browser / Flutter Web e para a Fase 6 (Authorization: Bearer).

1. JWT / Nimbus / pabast-auth

A remoção de código e dependências foi feita na Fase 1. Resumo e impacto em clientes: pabast-removal-phase1.md.

Checklist de verificação (Fase 2)

Item Estado esperado
Sem com.nimbusds:nimbus-jose-jwt no build.gradle.kts Sim
Sem bloco pabast-auth: nos YAMLs da aplicação Sim
Rotas /api/auth/pabast/login, /.well-known/jwks.json, /api/auth/jwks inexistentes PabastEndpointsRemovedIntegrationTest

2. CORS após remoção do login

Comentários em prod/vantroba e prod/onpetro deixaram de citar apenas o login HTTP; o CORS continua necessário para chamadas cross-origin (Flutter Web, ferramentas no browser) e, na Fase 6, para o header Authorization nas rotas da API.

Alterações no application.yml base

  • micronaut.server.dispatch-options-requests: true — encaminha OPTIONS para o pipeline (preflight no browser).
  • micronaut.server.cors.localhost-pass-through: true — mitigação “drive-by” do Micronaut quando o servidor resolve como localhost e a política de origens usa padrões amplos; avaliar em produção com hostname real / proxy.
  • Configuração nomeada default com:
  • allowed-origins-regex: ".*" — em Micronaut, uma lista allowed-origins: ["*"] não é o wildcard interno (CorsOriginConfiguration.ANY); origens reais não casam. Regex explícito ou lista de origens concretas evita esse erro.
  • allow-credentials: false — coerente com política ampla de origens (evita combinação inválida no CORS).
  • allowed-methods e allowed-headers (incluindo *) para preflight com vários headers (Fase 6).

Exemplos em prod/*/app/application.yaml

Os ficheiros Vantroba / On Petro ainda usam allowed-origins: ["*"]. Se no ambiente real os cabeçalhos CORS não aparecerem para origens concretas, alinhar ao application.yml base (regex ou lista explícita de origens).

3. Testes automatizados

  • CorsPreflightProbeController — rota só em src/test para exercitar CORS sem depender da API v1.
  • CorsPreflightIntegrationTest — GET /_test/cors-probe com header Origin e verificação de Access-Control-Allow-Origin. Não usamos um teste de preflight OPTIONS isolado: o CorsFilter do Micronaut valida preflight contra o router (CorsFilter#validatePreflightRequest) e pode responder 403 em cenários sem correspondência explícita; o fluxo “simples” (GET + Origin) cobre o comportamento relevante após o preflight no browser.

Referências