Leitura central da aula

Segurança é requisito não funcional. O sistema pode estar “funcionando”, mas ainda ser inseguro, auditavelmente frágil e vulnerável a erro humano, engenharia social e abuso de privilégios.

Objetivo da Aula

Entender segurança como atributo de qualidade do software e traduzir esse atributo em decisões concretas de autenticação, autorização, emissão de tokens, MFA e rastreabilidade para a API do projeto.

1. Storytelling: por que segurança entra no projeto agora

Imagine um dashboard gerencial com dados de RH e desempenho. O endpoint de exportação funciona, o relatório é bonito e o deploy está no ar. Um colaborador cai em phishing, entrega a senha e o atacante entra com credenciais legítimas. Não houve “exploit cinematográfico”; houve falha de desenho de segurança.

A partir desse ponto, o problema deixa de ser técnico apenas. A organização perde confidencialidade, confiança e capacidade de provar o que aconteceu. Por isso a pergunta correta não é “tem login?”, e sim “o que impede, detecta e rastreia abuso?”.

2. O que é SWEBOK e onde segurança se encaixa

SWEBOK significa Guide to the Software Engineering Body of Knowledge. Ele organiza o corpo de conhecimento essencial de engenharia de software. Em segurança, a leitura mais útil para esta disciplina é:

A mensagem principal é que segurança não mora em um único capítulo. Ela atravessa o ciclo inteiro.

3. Segurança como requisito não funcional

Requisitos funcionais descrevem serviços e comportamentos de negócio: cadastrar usuário, exportar relatório, filtrar dados. Requisitos não funcionais descrevem qualidades e restrições: desempenho, disponibilidade, confiabilidade e segurança.

Se não for mensurável, auditável ou testável, ainda está vago demais para ser requisito de segurança.

4. Autenticação x autorização

Em APIs, é comum modelar essa diferença também nas respostas:

5. Os três estágios da segurança

Segurança madura não é só barreira. É também visibilidade e explicabilidade.

6. Por que a senha está ficando obsoleta

A senha não está ficando irrelevante por fraqueza matemática, mas por vulnerabilidade operacional. O problema real é que:

Por isso a indústria migra para MFA, passkeys, biometria e tokens de vida curta.

7. Técnicas de segurança discutidas na aula

8. MFA com Google Authenticator no .NET

O padrão mais simples para o projeto é TOTP: o servidor gera um segredo, o usuário cadastra esse segredo no app Google Authenticator e, a cada login, informa um código temporário. O backend só emite a credencial final após validar esse segundo fator.

TOTP significa Time-based One-Time Password. É uma senha temporária que muda em intervalos curtos, geralmente 30 segundos. O aplicativo e o servidor conseguem gerar o mesmo código porque compartilham um segredo cadastrado durante o onboarding do usuário.

// Exemplo conceitual com Otp.NET
var secret = KeyGeneration.GenerateRandomKey(20);
var base32Secret = Base32Encoding.ToString(secret);

var otpUri =
  $"otpauth://totp/Projeto9:{email}?secret={base32Secret}&issuer=Projeto9";

var totp = new Totp(Base32Encoding.ToBytes(base32Secret));
var isValid = totp.VerifyTotp(
    codigoDigitado,
    out _,
    VerificationWindow.RfcSpecifiedNetworkDelay
);

if (!isValid)
{
    return Unauthorized("Codigo MFA invalido.");
}

Em produção, o segredo precisa ficar protegido, e o sistema deve oferecer códigos de recuperação, limite de tentativas e logs de ativação/falha.

9. Como funciona o JWT

JWT é um formato de token composto por header.payload.signature. Em geral, o provedor de identidade autentica o usuário e emite um token assinado. A API recebe esse token e valida:

{
  "sub": "user-123",
  "role": "manager",
  "department": "rh",
  "scope": "reports:read reports:export",
  "iss": "https://auth.projeto9.local",
  "aud": "projeto9-api",
  "exp": 1772804400
}

JWT não deve carregar segredo nem dado sensível desnecessário. Ele é útil porque transporta identidade e contexto, não porque substitui boas decisões de segurança.

10. Keycloak como técnica de segurança de token

Keycloak é uma solução open source de gerenciamento de identidade e acesso. Em vez de sua API implementar tudo manualmente, o sistema delega autenticação, emissão de token, gestão de usuários e integração com OAuth2/OIDC a um provedor especializado.

Isso reduz a chance de o time reinventar uma camada crítica com falhas conceituais.

11. Auth0 para o projeto

Auth0 é uma plataforma gerenciada de identidade. Para fins práticos da disciplina, ele pode ser encarado como uma alternativa comercial para delegar autenticação, MFA e emissão de tokens sem operar um servidor de IAM por conta própria.

12. Atividade de pesquisa do grupo

Escolham uma abordagem para aplicar no projeto e entreguem:

As duas sugestões da aula são:

Pergunta final para orientar o projeto

Se um atacante roubar apenas a senha de um usuário hoje, o que exatamente ainda impede esse atacante de acessar, exportar ou manipular os dados mais sensíveis da sua aplicação?