Autenticação e Autorização
Esta aula aborda os conceitos fundamentais de autenticação e autorização em segurança da informação. São explorados MFA, RBAC, ABAC, OAuth e OpenID Connect, com exemplos práticos e referências para aprofundamento.
Autenticação e autorização são pilares da segurança da informação. Autenticação verifica a identidade de um usuário ou sistema, enquanto autorização determina quais recursos ou ações essa identidade pode acessar. Nesta aula, exploraremos mecanismos modernos como MFA, RBAC, ABAC, OAuth e OpenID Connect, fundamentais para proteger sistemas e dados.
Entender a diferença entre autenticação e autorização é crucial: autenticação responde "quem é você?", autorização responde "o que você pode fazer?". Ambos são frequentemente implementados em conjunto, mas com tecnologias distintas.
MFA (Autenticação Multifator)
MFA (Multi-Factor Authentication) é um método de autenticação que exige dois ou mais fatores de verificação para conceder acesso. Os fatores são categorizados em algo que você sabe (senha), algo que você tem (token, smartphone) e algo que você é (biometria). O MFA reduz significativamente o risco de comprometimento, pois mesmo que uma senha seja roubada, o invasor precisa do segundo fator.
Exemplos comuns incluem: senha + código enviado por SMS, senha + aplicativo autenticador (como Google Authenticator), ou senha + impressão digital. Implementações modernas usam TOTP (Time-based One-Time Password) ou notificações push. O MFA é obrigatório em muitos padrões de segurança, como PCI-DSS e GDPR.
Exemplo de fluxo TOTP:
1. Usuário fornece senha (primeiro fator).
2. Servidor valida a senha.
3. Servidor solicita código TOTP do app autenticador.
4. Usuário gera código no app (ex: 482910).
5. Servidor verifica código usando chave secreta compartilhada.
6. Se válido, acesso concedido.RBAC (Controle de Acesso Baseado em Papéis)
RBAC (Role-Based Access Control) é um modelo de autorização que atribui permissões a papéis (roles), e usuários recebem esses papéis. Isso simplifica o gerenciamento, pois as permissões são associadas a funções organizacionais (ex: administrador, gerente, usuário comum). Um usuário pode ter múltiplos papéis, e papéis podem herdar permissões de outros (hierarquia).
Por exemplo, em um sistema hospitalar, o papel "médico" pode acessar prontuários, enquanto "enfermeiro" pode apenas registrar sinais vitais. RBAC é amplamente usado em sistemas empresariais e é suportado por bancos de dados e frameworks como Django, Spring Security e Active Directory.
Exemplo de definição de papéis:
Papéis:
- admin: permissões totais (CRUD em todos os recursos)
- editor: permissões de leitura e escrita em artigos
- leitor: permissões de leitura em artigos
Usuário Alice: papéis [admin, editor]
Usuário Bob: papéis [leitor]
Alice pode criar, editar e deletar artigos.
Bob pode apenas visualizar artigos.ABAC (Controle de Acesso Baseado em Atributos)
ABAC (Attribute-Based Access Control) é um modelo de autorização mais granular que usa atributos do usuário, do recurso, do ambiente e da ação para decidir o acesso. Diferente do RBAC, que depende de papéis fixos, o ABAC avalia políticas baseadas em regras lógicas (ex: "permitir acesso se usuário é gerente E departamento = vendas E horário = comercial").
Atributos comuns incluem: cargo, localização, horário, tipo de dispositivo, classificação do dado. ABAC é flexível e dinâmico, mas mais complexo de implementar. É usado em sistemas de nuvem, IoT e ambientes com requisitos de segurança elevados. O padrão XACML (eXtensible Access Control Markup Language) é uma referência para ABAC.
Exemplo de política ABAC:
Regra: Permitir acesso a documento financeiro se:
- atributo do usuário: cargo = 'contador' OU 'CFO'
- atributo do recurso: classificação = 'confidencial'
- atributo de ambiente: horário entre 9h e 18h
- atributo de ação: 'ler' OU 'baixar'OAuth e OpenID Connect
OAuth 2.0 é um protocolo de autorização que permite que aplicativos obtenham acesso limitado a recursos de um usuário em nome dele, sem compartilhar a senha. Ele define papéis como resource owner (usuário), client (aplicativo), authorization server e resource server. O fluxo típico envolve a emissão de tokens de acesso (access tokens) que são usados para acessar APIs.
OpenID Connect (OIDC) é uma camada de autenticação construída sobre OAuth 2.0. Enquanto OAuth foca em autorização, OIDC adiciona autenticação, fornecendo um token de identidade (ID token) no formato JWT (JSON Web Token). OIDC permite que um cliente verifique a identidade do usuário e obtenha informações básicas do perfil. É amplamente usado para login social ("Login com Google", "Login com Facebook").
Exemplo de fluxo OAuth 2.0 com OIDC:
1. Usuário clica em "Login com Google" no site.
2. Site redireciona para Google (authorization server).
3. Usuário faz login e consente.
4. Google redireciona de volta ao site com um código de autorização.
5. Site troca o código por tokens (access token + id token).
6. Site usa id token para autenticar o usuário (verifica assinatura, claims).
7. Site usa access token para acessar APIs do Google (ex: Google Calendar).Referências
- Wikipedia - Multi-factor authentication
- Wikipedia - Role-based access control
- Wikipedia - Attribute-based access control
- OAuth 2.0 - Official site
- OpenID Connect - Official site
- RFC 6749 - The OAuth 2.0 Authorization Framework
- RFC 7519 - JSON Web Token (JWT)
- Microsoft - OpenID Connect protocol
Exercícios
- Explique a diferença entre autenticação e autorização, e dê um exemplo de cada.
- Descreva um cenário onde o uso de MFA é essencial e explique por quê.
- Diferencie RBAC de ABAC, destacando vantagens e desvantagens de cada um.
- Explique o papel do token de acesso (access token) no OAuth 2.0 e como ele difere do token de ID no OpenID Connect.
- Desenhe um fluxo simples de OAuth 2.0 com OpenID Connect, indicando as partes envolvidas e os passos principais.
Boas Práticas
Ao implementar autenticação e autorização, siga estas recomendações: nunca armazene senhas em texto plano; use hashing forte (bcrypt, Argon2). Para MFA, prefira TOTP ou notificações push em vez de SMS (mais seguro). Em RBAC, evite papéis muito granulares; use herança para simplificar. Em ABAC, documente bem as políticas e evite regras conflitantes. Para OAuth/OIDC, sempre valide tokens JWT (assinatura, expiração, issuer). Use HTTPS em todas as comunicações.