Aula 07 - Autenticação e Autorização 🔑
Objetivo
Objetivo: Diferenciar autenticação de autorização, entender os fatores de autenticação e os modelos de controle de acesso mais usados na indústria, e aprender a armazenar senhas com segurança.
1. 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.
2. Os Três Fatores de Autenticação 🧑💻
| 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 |
MFA (Multi-Factor Authentication)
Combinar 2+ fatores diferentes reduz drasticamente o risco: mesmo que a senha vaze, o atacante ainda precisa do segundo fator.
3. Armazenamento Seguro de Senhas 🗝️
Nunca guarde senhas em texto puro, nem com hash simples (SHA-256 puro é rápido demais e vulnerável a rainbow tables).
graph LR
A[senha123] --> C["+ salt aleatório"]
C --> H["bcrypt/Argon2 (lento de propósito)"]
H --> R[Hash único e seguro] - bcrypt: padrão de mercado, salt embutido automaticamente.
- Argon2: recomendação mais forte atualmente, vencedor da Password Hashing Competition.
4. Modelos de Controle de Acesso 🎚️
| Modelo | Sigla | Como funciona |
|---|---|---|
| Controle Baseado em Papéis | RBAC | Usuário recebe um "papel" (admin, editor, leitor) com permissões pré-definidas |
| Controle Baseado em Atributos | ABAC | Decisão baseada em atributos dinâmicos (horário, localização, departamento) |
| Princípio do Menor Privilégio | — | Cada usuário/sistema deve ter apenas o acesso mínimo necessário |
graph TD
U[Usuário] --> R[Papel: Editor]
R --> P1[Permissão: Ler]
R --> P2[Permissão: Editar]
R -.->|Não tem| P3[Permissão: Apagar usuários] 5. Tokens de Sessão: JWT e Sessões 🎫
- Sessão tradicional: servidor guarda o estado do usuário logado em memória/banco.
- JWT (JSON Web Token): "crachá digital" assinado, que carrega os dados do usuário — o servidor não precisa guardar nada (stateless).
JWT não é criptografado por padrão
O payload de um JWT comum é apenas codificado, não cifrado — qualquer um pode decodificar e ler. Nunca guarde senhas ou dados sensíveis dentro dele.
6. Mini-Projeto: Simulador de RBAC 🚀
- Defina 3 papéis:
admin,editor,leitor. - Defina 4 permissões:
criar,editar,apagar,visualizar. - Associe cada papel às permissões que deveria ter.
- Escreva uma função
tem_permissao(papel, acao)que retornatrue/falseconsultando essa estrutura.
7. Exercício de Fixação 🧠
- Cite um exemplo de cada um dos três fatores de autenticação.
- Por que hash simples (SHA-256 puro) não é adequado para senhas?
- Explique o Princípio do Menor Privilégio com um exemplo prático.
Próxima Aula: Protegendo o tráfego entre sistemas: Segurança em Redes 🌐