Aula 08 – Autenticação e Controle de Acesso 🔏
Cifrar dados não adianta muito se qualquer pessoa consegue entrar no sistema e acessá-los. Nesta aula vamos falar sobre como provar identidade e decidir quem pode fazer o quê.
🧑💻 Os Três Fatores de Autenticação
Autenticação é o processo de provar que você é quem diz ser. Existem três categorias de "fatores":
| Fator | Categoria | Exemplo |
|---|---|---|
| Algo que você sabe | Conhecimento | Senha, PIN |
| Algo que você tem | Posse | Celular (app autenticador), token físico |
| Algo que você é | Inerência | Impressão digital, reconhecimento facial |
Autenticação Multifator (MFA)
Combinar 2 ou mais fatores diferentes (ex: senha + código do celular) é chamado de MFA. Mesmo que um atacante roube sua senha, ele ainda precisa do segundo fator para entrar.
🔢 O Padrão Mais Comum: TOTP
O TOTP (Time-based One-Time Password) é o algoritmo por trás de apps como Google Authenticator e Microsoft Authenticator. Ele gera um código de 6 dígitos que muda a cada 30 segundos, baseado em um segredo compartilhado e no horário atual.
graph LR
A["Segredo compartilhado (gerado no cadastro)"] --> H["Função HMAC"]
T["Horário atual (janela de 30s)"] --> H
H --> C["Código de 6 dígitos"]
C --> V{"Servidor calcula o mesmo código?"}
V -- Sim --> OK["Autenticado"] 🚪 Autenticação x Autorização
Dois conceitos frequentemente confundidos, mas que respondem perguntas diferentes:
- Autenticação (AuthN): "Quem é você?" — provar identidade.
- Autorização (AuthZ): "O que você pode fazer?" — decidir permissões, depois que a identidade já foi confirmada.
🎚️ Modelos de Controle de Acesso
| Modelo | Sigla | Como funciona |
|---|---|---|
| Controle de Acesso Baseado em Papéis | RBAC | Usuário recebe um "papel" (ex: admin, editor, leitor) com permissões pré-definidas |
| Controle de Acesso Baseado em Atributos | ABAC | Decisão baseada em atributos dinâmicos (ex: horário, localização, departamento) |
| Princípio do Menor Privilégio | — | Cada usuário/sistema deve ter apenas o acesso mínimo necessário para sua função |
graph TD
U["Usuário"] --> R["Papel: Editor"]
R --> P1["Permissão: Ler artigos"]
R --> P2["Permissão: Editar artigos"]
R -.->|Não tem| P3["Permissão: Apagar usuários"] Princípio do Menor Privilégio na prática
Um estagiário do time de suporte não precisa de acesso de administrador ao banco de dados de produção — mesmo que "seja mais rápido" dar acesso total, isso aumenta drasticamente o impacto de qualquer erro ou credencial comprometida.
💻 Gerando um Código TOTP
📝 Exercícios de Fixação
- Básico: Cite um exemplo de cada um dos três fatores de autenticação.
- Básico: Qual a diferença entre autenticação e autorização?
- Intermediário: Por que MFA protege mesmo que a senha do usuário tenha vazado?
- Intermediário: Explique o Princípio do Menor Privilégio com um exemplo do seu dia a dia (trabalho, faculdade, jogo online).
- Desafio: Pesquise por que SMS é considerado o método de MFA menos seguro entre as opções comuns (comparado a app autenticador ou chave física).
🚀 Mini-Projeto: Simulador de RBAC
Objetivo: Modelar um sistema simples de controle de acesso baseado em papéis.
- Defina 3 papéis:
admin,editor,leitor. - Defina 4 permissões:
criar,editar,apagar,visualizar. - Em uma estrutura de dados (dicionário/objeto), associe cada papel às permissões que ele deveria ter.
- Escreva uma função
tem_permissao(papel, acao)que retornatrue/falseconsultando essa estrutura.