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.Cosméticos da tela de login servida pela lib (xadm/login.jte) — namespacexadm.views.login.*, estendendo oxadm.views.*que oXadmViewModeljá usa.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),authEnabled(doAuthSettings, controla o bloco "Sair" do navbar) eappVersao(deVersaoInfo.versaoAtual()— okit/headerRight.jtejá renderiza a chave sob@if(appVersao != null), e a lib já tem o valor; app que escreve um processor local para isso está buscando o que a lib já sabe).