Módulo 5 6 horas Intermediário

Segurança Digital e Autenticação

Entenda como funciona a segurança em aplicações e o protocolo OIDC

Segurança Digital
Progresso: 0/7 (0%)

Objetivos do Módulo

Neste módulo final teórico, você vai aprender como manter suas aplicações e jogos seguros, proteger dados dos usuários e implementar sistemas de login modernos usando padrões profissionais como OAuth 2.0 e OpenID Connect (OIDC).

O que você vai aprender:

  • Diferença entre autenticação e autorização
  • Segurança em aplicações
  • Protocolo OAuth 2.0
  • OpenID Connect (OIDC)
  • Tokens de acesso
  • Fluxo de autenticação
  • Boas práticas de segurança

O que você vai entender:

  • Como funciona "Login com Google"
  • Por que não salvar senhas
  • O que são tokens JWT
  • Fluxos de autorização

5.1 Autenticação vs Autorização

Para Leigos:

São conceitos diferentes mas que trabalham juntos:

  • Autenticação: Provar quem você é (como mostrar seu RG)
  • Autorização: O que você pode fazer (como ter permissão para entrar em certas áreas)

Exemplo do dia a dia: Quando você entra em um prédio, o segurança verifica sua identidade (autenticação), e depois seu crachá mostra em quais andares você pode entrar (autorização).

Para Técnicos:
  • Authentication (Autenticação): Processo de verificar a identidade do usuário (username + password, biometria, certificados, MFA)
  • Authorization (Autorização): Processo de verificar se o usuário autenticado tem permissão para acessar determinado recurso (RBAC, ABAC, claims)

Por que Segurança é Importante?

  • Proteção de dados pessoais: Nome, email, senhas, histórico
  • Prevenção de fraudes: Compras indevidas, roubo de contas
  • Conformidade legal: LGPD, GDPR exigem proteção de dados
  • Reputação: Vazamentos destroem a confiança dos usuários

❌ Erros Comuns de Segurança

  • Salvar senhas em texto puro no banco de dados
  • Não usar HTTPS
  • Validar dados apenas no frontend
  • Expor informações sensíveis em URLs
  • Não implementar rate limiting

5.2 OAuth 2.0 e OpenID Connect (OIDC)

O que é OAuth 2.0?

OAuth 2.0 é um protocolo de autorização que permite que aplicações acessem recursos em nome do usuário SEM conhecer sua senha.

Analogia:

Imagine que você vai viajar e deixa a chave do seu apartamento com um amigo para regar suas plantas. Você não deu a senha do cofre, apenas acesso temporário para uma tarefa específica. OAuth funciona assim: dá permissões temporárias e limitadas.

O que é OIDC?

OpenID Connect (OIDC) é uma camada de autenticação construída sobre OAuth 2.0. Adiciona a capacidade de verificar a identidade do usuário e obter informações básicas de perfil.

OAuth 2.0

Foco: Autorização

Uso: "Permite que este app acesse suas fotos"

Retorna: Access Token

OIDC

Foco: Autenticação + Autorização

Uso: "Login com Google"

Retorna: ID Token + Access Token

Fluxo de Autenticação OIDC

Veja como funciona quando você clica em "Login com Google":

1. 👤 Usuário: Clica em "Login com Google" no seu app
2. 🔄 App: Redireciona para Google
3. 🔐 Google: Pede login (se necessário)
4. ✅ Usuário: Aprova o acesso
5. 🎫 Google: Devolve um código de autorização
6. 🔄 App: Troca o código por tokens
7. 🎉 App: Recebe ID Token (quem é o usuário) + Access Token (o que pode fazer)
8. 👋 App: Usuário está logado!

Tipos de Tokens

ID Token (JWT)

Contém informações sobre o usuário:

  • Nome
  • Email
  • Foto de perfil
  • ID único

Formato: JSON Web Token (JWT) - 3 partes separadas por pontos

Access Token

Permite acessar recursos protegidos:

  • APIs do Google
  • Dados do usuário
  • Serviços autorizados

Validade: Curta (minutos/horas)

Estrutura de um JWT

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkw...

Dividido em 3 partes:
1. HEADER (cabeçalho): tipo e algoritmo
2. PAYLOAD (dados): informações do usuário
3. SIGNATURE (assinatura): garante que não foi alterado
Decodificando um JWT:
import base64
import json

def decodificar_jwt(token):
    partes = token.split('.')
    
    # Decodificar header e payload (não a assinatura)
    header = json.loads(base64.b64decode(partes[0] + '=='))
    payload = json.loads(base64.b64decode(partes[1] + '=='))
    
    return header, payload

# Exemplo
token_exemplo = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvYW8iLCJlbWFpbCI6ImpvYW9AZXhhbXBsZS5jb20ifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

header, payload = decodificar_jwt(token_exemplo)
print("Header:", header)
print("Payload:", payload)

5.3 Implementando Login Seguro

Nunca Faça Isso!

# ❌ PÉSSIMA IDEIA!
senha = input("Digite sua senha: ")
if senha == "senha123":  # senha hardcoded
    print("Login OK")

# ❌ NUNCA salve assim no banco:
database.save(username="joao", password="minhasenha123")

Faça Isso!

import hashlib
import os

def hash_senha(senha):
    """Hashear senha com salt"""
    salt = os.urandom(32)
    hash = hashlib.pbkdf2_hmac('sha256', senha.encode('utf-8'), salt, 100000)
    return salt + hash

def verificar_senha(senha_digitada, hash_armazenado):
    """Verificar se senha corresponde ao hash"""
    salt = hash_armazenado[:32]
    hash_armazenado = hash_armazenado[32:]
    hash_novo = hashlib.pbkdf2_hmac('sha256', senha_digitada.encode('utf-8'), salt, 100000)
    return hash_novo == hash_armazenado

# Uso
senha_usuario = "minhasenha123"
hash_seguro = hash_senha(senha_usuario)
# Salve hash_seguro no banco, não a senha!

# Na verificação
if verificar_senha("minhasenha123", hash_seguro):
    print("Login OK!")

Boas Práticas de Segurança

  • ✅ Use HTTPS sempre
  • ✅ Hash senhas com algoritmos fortes (bcrypt, Argon2)
  • ✅ Implemente rate limiting (limite tentativas de login)
  • ✅ Use OAuth/OIDC quando possível
  • ✅ Valide entradas no backend também
  • ✅ Não exponha erros detalhados para usuários
  • ✅ Mantenha bibliotecas atualizadas
  • ✅ Use tokens com expiração
  • ✅ Implemente 2FA (autenticação de dois fatores)

Recursos para Aprender Mais

  • OAuth 2.0: https://oauth.net/2/
  • OpenID Connect: https://openid.net/connect/
  • JWT: https://jwt.io/
  • OWASP (Segurança): https://owasp.org/

🎓 Para se aprofundar

Se você gostou deste módulo, explore o Reino OIDC - um guia completo e lúdico sobre OpenID Connect com personagens, história e exemplos práticos!

Visitar Reino OIDC

📋 Checklist de Progresso do Módulo 5