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— encaminhaOPTIONSpara 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
defaultcom: allowed-origins-regex: ".*"— em Micronaut, uma listaallowed-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-methodseallowed-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ó emsrc/testpara exercitar CORS sem depender da API v1.CorsPreflightIntegrationTest—GET /_test/cors-probecom headerOrigine verificação deAccess-Control-Allow-Origin. Não usamos um teste de preflightOPTIONSisolado: oCorsFilterdo 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¶
- Fase 1: pabast-removal-phase1.md
- Fase 6 (Bearer estático em
/api/**+/health): migration-phase6-seguranca.md · roadmap migration-roadmap-phases-6-9.md - Micronaut CORS: guia oficial