Segurança como requisito não funcional: de storytelling de risco a autenticação moderna, MFA, JWT e decisão arquitetural para o projeto.
Segurança não começa com criptografia. Começa com contexto de negócio.
Uma empresa cria um dashboard gerencial com dados de desempenho, salários variáveis, turnover e projeção de metas. A API funciona, o deploy está no ar e o time comemora a entrega.
Um colaborador recebe um link falso, entrega a senha em uma página clonada e um atacante entra com credenciais válidas.
O problema não é só “logar”. O invasor exporta indicadores internos, acessa relatórios de RH e compromete decisões estratégicas.
Sem autenticação forte, autorização adequada, logs e trilha de auditoria, o sistema estava funcional, mas não estava pronto.
Segurança aparece quando o software encontra pessoas, processos, fraude, erro humano e impacto organizacional.
SWEBOK = Guide to the Software Engineering Body of Knowledge.
O SWEBOK organiza o conhecimento essencial de engenharia de software.
Em outras palavras: segurança é um atributo de qualidade e uma decisão de engenharia, não um adendo tardio.
Ler SWEBOKEla não descreve “o que o sistema faz”, e sim “como o sistema deve se comportar sob risco”.
| Pergunta | Exemplo funcional | Exemplo não funcional de segurança |
|---|---|---|
| O que o sistema entrega? | “Gerar relatório de indicadores do RH.” | “Somente gestores autorizados podem acessar relatórios agregados do RH.” |
| Como a API responde? | “Disponibilizar endpoint de exportação.” | “Exigir token válido, MFA no login e registrar trilha de auditoria.” |
| Que evidência esperamos? | “O endpoint retorna um arquivo CSV.” | “Tentativas inválidas geram `401`, acessos sem permissão geram `403` e eventos ficam rastreáveis.” |
Segurança como NFR precisa ser mensurável: política de acesso, tempo de expiração, logs, rotação de segredo, MFA obrigatório, taxa de bloqueio, auditoria.
Confundir esses conceitos gera bugs de negócio e falhas graves de acesso.
“Quem é você?”
401 Unauthorized.“O que você pode fazer?”
admin, claim department=finance, policy CanExportReports.403 Forbidden.Login sem política de acesso é perigoso. Política sem identidade forte também. Você precisa das duas camadas.
Uma defesa madura não só bloqueia. Ela também enxerga e explica.
Time júnior costuma parar em “bloquear”. Time maduro consegue bloquear, observar e provar.
Não porque criptografia falhou, mas porque o elo fraco continua sendo humano.
A senha sozinha prova pouco. O invasor pode roubá-la sem “quebrá-la”. Por isso MFA e login resistente a phishing reduzem o impacto da engenharia social.
Misturar fatores reduz o risco de um único vazamento comprometer tudo.
Senha, PIN, resposta secreta.
Celular com Google Authenticator, token físico, app autenticador.
Biometria: digital, face, voiceprint.
Padrão de comportamento, dispositivo confiável, contexto geográfico.
Para um projeto acadêmico com API e dashboard, o melhor custo-benefício costuma ser: senha + TOTP via app autenticador + expiração curta de token + trilha de auditoria.
Time-based One-Time Password: uma senha temporária gerada a partir de tempo e segredo compartilhado.
TOTP é um código numérico de uso único que muda periodicamente, normalmente a cada 30 segundos. O aplicativo autenticador e o servidor conseguem gerar o mesmo código porque compartilham um segredo cadastrado previamente.
TOTP não substitui a senha por completo. Ele adiciona uma prova extra de posse do dispositivo do usuário. É por isso que o Google Authenticator é um mecanismo de MFA, não um login isolado.
O app e o servidor compartilham um segredo e geram códigos temporários sincronizados.
O sistema gera um segredo por usuário e exibe QR Code no formato otpauth://.
O usuário lê o QR Code no Google Authenticator e passa a gerar códigos de 30 em 30 segundos.
No login, servidor valida e só então emite a sessão ou o JWT.
Em produção, o segredo precisa ficar protegido em banco e nunca exposto novamente após o onboarding.
Primeiro valida identidade. Depois segundo fator. Só então entrega credencial de acesso.
JWT não é “segurança mágica”. É um formato de token assinado com regras claras de uso.
header.payload.signature
O token carrega identidade e contexto. A API decide o acesso com base nisso.
Permitir exportação somente para usuários com scope=reports:export e department=rh.
Usar apenas role genérica e esquecer contexto de domínio, como área, filial, sensibilidade do relatório ou tenant.
Nem todo time precisa implementar autenticação do zero dentro da API.
Auth0 não é “implementação paga do Keycloak” no sentido técnico estrito. Mas, para fins didáticos, ambos cumprem papel semelhante: externalizar autenticação, emissão de token e parte da governança de acesso.
Escolham uma abordagem simples, defensável e implementável no tempo do módulo.
Se o objetivo for demonstrar domínio de arquitetura de API, Auth0 tende a ficar mais próximo da discussão de tokens, claims e gateway.
O que deve existir ao final da sprint para a solução ser defensável.
401 e 403.Vocês vão pesquisar, argumentar e decidir qual abordagem de autenticação entra no projeto.
Google Authenticator via Firebase
Investigar como o provedor cuida da identidade e como a API consome o token com confiança.
Auth0
Investigar como delegar autenticação, MFA, roles/claims e validação de JWT no backend .NET.
Se alguém roubar apenas a senha de um usuário hoje, o que exatamente ainda impediria esse atacante de exportar os relatórios sensíveis do seu sistema?