Pular para conteúdo

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 🚀

  1. Defina 3 papéis: admin, editor, leitor.
  2. Defina 4 permissões: criar, editar, apagar, visualizar.
  3. Associe cada papel às permissões que deveria ter.
  4. Escreva uma função tem_permissao(papel, acao) que retorna true/false consultando essa estrutura.

7. Exercício de Fixação 🧠

  1. Cite um exemplo de cada um dos três fatores de autenticação.
  2. Por que hash simples (SHA-256 puro) não é adequado para senhas?
  3. 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 🌐