🚀 Capítulo 04: Autenticação e Autorização (Tema: Senhor dos Anéis)

NOTE

Este capítulo utiliza a temática de Senhor dos Anéis para explicar a diferença entre Autenticação e Autorização. Dizer a palavra mágica prova quem você é; mas só os autorizados podem passar pela ponte!


1. 🎯 Objetivo da Aula

Compreender a diferença crucial entre Autenticação (provar quem você é) e Autorização (o que você tem permissão para fazer), e como aplicar esses conceitos no desenvolvimento seguro.

2. 🏢 O Cenário Prático (Seu Desafio)

Você está na jornada para destruir o anel e encontra duas situações clássicas:

  • As Portas de Moria: Para as portas se abrirem, você precisa dizer a palavra mágica: “Mellon” (Amigo). O sistema de segurança das portas verifica se você sabe a “senha” para provar que você é um amigo. Isso é Autenticação.
  • A Ponte de Khazad-dûm: Gandalf bate o cajado e grita para o Balrog: “You shall not pass!” (Você não vai passar!). O Balrog pode até provar que ele é o Balrog (Autenticação bem-sucedida), mas ele não tem permissão para atravessar a ponte. Isso é Autorização.

No software, misturar esses dois conceitos é um erro grave que gera muitas falhas de segurança. Seu desafio é manter o Balrog do lado de fora!


3. 🧠 Fundamentos: A Teoria Traduzida

Embora pareçam a mesma coisa, Autenticação e Autorização são processos completamente diferentes e complementares.

🔑 1. Autenticação (Quem é você?):

É o processo de verificar a identidade de um usuário ou sistema.

  • Os 3 Fatores de Autenticação:
    1. O que você sabe: Uma senha, um PIN ou a resposta para uma pergunta secreta.
    2. O que você tem: Um token físico, o seu celular (para receber SMS) ou um cartão de acesso.
    3. O que você é: Sua digital, reconhecimento facial ou leitura de íris (Biometria).
  • Exemplo: Digitar usuário e senha em um site.

🛡️ 2. Autorização (O que você pode fazer?):

É o processo de verificar se um usuário já autenticado tem permissão para acessar um recurso específico ou realizar uma ação.

  • Como funciona: Geralmente baseado em Perfis de Acesso (Roles). Ex: Usuário comum, Moderador, Administrador.
  • Exemplo: Um usuário comum tenta acessar a página /admin e o sistema bloqueia dizendo “Acesso Negado”.

4. 📖 Exemplo Guiado: O Teste de Acesso (JS)

Veja como esses dois conceitos se traduzem no código:

// Simulação de Autenticação e Autorização
const usuario = {
    nome: "Frodo",
    senhaSalva: "123456",
    perfil: "membro_comum" // ou "admin"
};
 
// 1. AUTENTICAÇÃO
function fazerLogin(nome, senhaDigitada) {
    if (nome === usuario.nome && senhaDigitada === usuario.senhaSalva) {
        console.log("✅ Autenticação realizada com sucesso! Bem-vindo, " + nome);
        return true;
    } else {
        console.log("❌ Falha na Autenticação! Senha incorreta.");
        return false;
    }
}
 
// 2. AUTORIZAÇÃO
function acessarAreaRestrita(perfilUsuario) {
    if (perfilUsuario === "admin") {
        console.log("🔓 Acesso Autorizado à área restrita.");
    } else {
        console.log("🚧 Bloqueado! Você não tem autorização para passar por aqui.");
    }
}
 
// Execução
if (fazerLogin("Frodo", "123456")) {
    acessarAreaRestrita(usuario.perfil); // Frodo passará pela autenticação, mas será bloqueado na autorização!
}

5. 🛠️ Prática Obrigatória 1: Autenticação ou Autorização?

Diga se a situação descreve uma falha de Autenticação ou de Autorização:

  1. Um usuário comum conseguiu digitar um link direto no navegador e acessou a página onde podia apagar a conta de outros usuários.
  2. Um hacker conseguiu descobrir a senha do administrador porque ela era muito fácil (123456) e não havia limite de tentativas de login.

6. 🛠️ Prática Obrigatória 2: Os Fatores de Segurança

O WhatsApp e o Instagram usam a chamada “Autenticação em Duas Etapas” (MFA).

  1. Quais são os 2 fatores (da lista do que você sabe, tem ou é) que estão sendo combinados quando você digita sua senha e depois digita o código que chegou por SMS no seu celular?
  2. Por que isso é muito mais seguro do que usar apenas a senha?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 04 Seguranca) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_12_desenvolvimento_seguro/
├── capitulos/
│   ├── capitulo_04_autenticacao.md
│   └── codigos/
│       └── cap04/
│           └── login_sistema.js

💡 Checkpoint de Lógica

Regra de Ouro da Autorização: Princípio do Menor Privilégio. Um usuário só deve ter permissão para acessar aquilo que é estritamente necessário para ele fazer o seu trabalho. Nada a mais!

10. 🔥 Desafio de Fixação

Pesquise sobre o que significa a sigla RBAC (Role-Based Access Control) e como ela ajuda a organizar as permissões em sistemas grandes.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Autorização (Ele provou quem era, mas o sistema deixou ele fazer algo que não devia).
  2. Autenticação (A porta de entrada estava fraca e permitiu que um estranho fingisse ser o administrador). Gabarito da Prática 2:
  3. O que você sabe (A senha) + O que você tem (O celular que recebe o SMS).
  4. Porque mesmo que o hacker descubra a sua senha, ele não conseguirá entrar na conta a menos que também tenha roubado o seu aparelho celular físico!

Capitulo Anterior | Proximo Capitulo