Como o Granauth funciona na prática
Entenda o fluxo de autenticação, autorização granular e integração com aplicações consumidoras usando permissões fora do JWT, cache e permissionVersion.
Caso de uso real
Imagine uma aplicação de solicitações internas. Diferentes usuários e grupos têm permissões distintas para visualizar, aprovar e exportar.
Este é um modelo de autorização granular: permissões podem vir de grupos ou serem concedidas diretamente ao usuário.
Fluxo de autenticação
Usuário faz login
Credenciais são enviadas para o Granauth.
Granauth valida
Senha, políticas e estado do usuário são verificados.
JWT enxuto gerado
Token carrega apenas dados essenciais.
Refresh Token criado
Permite renovar sessão com controle.
Aplicação usa JWT
Token identifica o usuário nas requisições.
Por que permissões ficam fora do JWT?
- Evita tokens grandes que podem exceder limites de headers HTTP
- Reduz acoplamento entre autenticação e autorização
- Permite atualização de permissões sem depender exclusivamente da expiração do token
Fluxo de autorização granular
Usuário chama endpoint protegido
Exemplo: POST /service-requests/123/approve
API consumidora valida JWT
Identifica o usuário e verifica a autenticidade do token.
Policy identifica recurso e ação
Permissão exigida: SERVICE_REQUESTS / APPROVE
Granauth.Client busca permissões
Verifica cache local ou consulta a central.
permissionVersion valida cache
Se a versão mudou, recarrega permissões.
Acesso permitido ou negado
Decisão baseada em permissões diretas ou herdadas de grupos.
Evento pode ser auditado
Acessos bloqueados e ações sensíveis são registrados.
POST /service-requests/{id}/approve
SERVICE_REQUESTS / APPROVE
O papel do Granauth.Client
O Granauth.Client evita que cada API consumidora precise reimplementar comunicação, cache e validação de permissões.
Consulta permissões
Carrega permissões efetivas do usuário na aplicação.
Mantém cache local
Reduz latência e carga na central de autorização.
Valida recurso e ação
Verifica se o usuário possui a permissão específica.
Verifica permissionVersion
Detecta mudanças e invalida cache quando necessário.
Integra com policies
Conecta-se às políticas de autorização do ASP.NET Core.
Reduz código repetido
Evita duplicação de lógica em cada API consumidora.
[RequirePermission(DemoResources.ServiceRequests, DemoActions.Approve)]
public async Task<IActionResult> ApproveRequest(int id)
{
// Lógica de aprovação
}
Frontend melhora a experiência. Backend garante a segurança.
Frontend
Usa permissões para:
- Esconder menus e botões
- Desabilitar rotas
- Melhorar experiência do usuário
- Evitar tentativas desnecessárias
Backend
Valida permissões antes de:
- Executar ações protegidas
- Retornar dados sensíveis
- Modificar estado do sistema
- Processar requisições críticas
Importante: Mesmo que alguém tente chamar a API diretamente contornando o frontend, o endpoint deve validar recurso e ação no backend.
Cache sem perder controle
A aplicação consumidora pode cachear permissões para evitar chamadas repetidas. Quando permissões mudam, o permissionVersion garante que o cache seja invalidado.
Permissão alterada no Admin
Administrador concede ou remove permissão.
permissionVersion atualizado
O Granauth incrementa a versão global ou do usuário.
Client detecta versão antiga
Compara a versão em cache com a versão atual.
Cache invalidado
O cache local é descartado.
Permissões recarregadas
Nova consulta traz permissões atualizadas.
Vantagens do permissionVersion
- Reduz latência com cache local
- Garante consistência quando permissões mudam
- Evita validação expirada baseada apenas em tempo
- Permite invalidação seletiva ou global
Onde a auditoria entra
Auditoria registra eventos relevantes do fluxo, como falhas de autenticação, acessos bloqueados, permissões concedidas/removidas e alterações administrativas.
A auditoria está em evolução contínua. Eventos são adicionados conforme necessidades reais surgem durante integrações.
Quer entender melhor o fluxo técnico?
Para conversar sobre integração, tirar dúvidas técnicas ou acompanhar a evolução do projeto, entre em contato.