Package br.com.xadm.comum.seguranca
package br.com.xadm.comum.seguranca
Stack de autenticação compartilhada da casa (ADR 0019, decisão 0011). As duas portas de
autenticação: Bearer estático em
/api/** para integrações, e login Google nas views
server-rendered (bypass em dev/test, fail-closed em prod). Reúne os filtros/fetchers do
micronaut-security nativo, as regras de acesso e os handlers de rejeição.
Config por-app via AuthSettings (project-id/audience/cookie) — a lib não fixa o
tenant. Extração conservadora e caracterizada (só byte-idêntico sobe; ver
.ia/001-caracterizacao-auth-matriz.md no repo).
-
ClassDescriptionExceção de autenticação com
codeestável — ex.:"invalid_token","invalid_session","jwks_unavailable","csrf_mismatch","domain_not_allowed".Configurações de autenticação mapeadas do blocoauth:emapplication.yml.Contrato estável de autenticação das views: os atributos de request que oSessionAuthenticationFetcherpopula após validar a sessão e queGlobalViewModeleCsrfTokensleem, o nome do cookie de sessão, e helpers idênticos entre apps.Token CSRF dos forms de view.Valida Firebase ID Tokens via JWKS público do Google.Claims extraídos de um Firebase ID Token válido.Perfis efetivos do Micronaut.AuthenticationFetchernativo das views: lê o cookiexadm_session(JWT HS256 emitido peloSessionTokenService) e, se válido, devolve umaAuthenticationcom o papelROLE_VIEW.Emite e verifica JWTs HS256 usados como cookie de sessão das views.Claims de uma sessão válida.Faz valer o "só-leitura" do principal de smoke: uma sessão com o papelSessionAuthenticationFetcher.ROLE_SMOKEsó pode usar métodos seguros (GET/HEAD/OPTIONS); qualquer escrita vira403em RFC-7807.Seam do smoke de produção: troca uma credencial dedicada por um cookie de sessão, sem a dança do provedor.Valida o Bearer token estático configurado emapp.api-token(API_BEARER_TOKEN).Fluxo de login Google (Firebase) das views X-Adm, COMPARTILHADO — restrito a emails do domínio configurado (spec 006).Body doPOST /login/callback.Rate limit COMPARTILHADO dos endpoints públicos que emitem sessão (piso de segurança): no máximoauth.login-rate-limit-per-minute(default 60) tentativas por IP por janela noPOST /login/**e noPOST /smoke/**.ViewModelProcessorde referência da casa: injeta em TODO model de view server-render os globais que okit/layout.jte(decisão 0025) espera — identidade da casa (appNome/clienteXadm), sessão (currentUserEmail/currentUserName/csrfToken, dos atributos populados peloSessionAuthenticationFetcher) eauthEnabled(doAuthSettings, controla o bloco "Sair" do navbar).