A diferença entre autenticar e autorizar

Autenticação prova identidade; autorização define permissões.

Esses dois conceitos são frequentemente confundidos, mas representam etapas diferentes e igualmente essenciais de segurança. Autenticação e o processo de verificar quem você e: você apresenta suas credenciais, usuário e senha, biometria ou token fisico, e o sistema confirma sua identidade. Autorização e o processo que acontece depois: verificar o que você, ja identificado, tem permissão de fazer. Um usuário pode ser autenticado com sucesso mas não autorizado a acessar um recurso específico. Confundir os dois e um erro clássico de segurança. Um sistema seguro implementa as duas camadas separadamente e de forma explícita, não apenas checando se o usuário esta logado mas também verificando se ele tem permissão para a ação específica que esta tentando executar.

Session vs Token

Session guarda estado no servidor; token e stateless e escala melhor horizontalmente.

Na autenticação baseada em session, o servidor cria e armazena um objeto de sessão após o login. O ID da sessão e enviado ao cliente em um cookie. A cada requisição, o servidor consulta o armazenamento de sessões para verificar se o usuário esta autenticado. E simples, mas em sistemas horizontalmente escalados, todas as instâncias precisam acessar o mesmo armazenamento de sessões, criando acoplamento. Na autenticação baseada em token, o servidor emite um token assinado que contem as informações do usuário. O cliente armazena o token e o envia em cada requisição. O servidor valida a assinatura sem precisar consultar um armazenamento central. O token e stateless e escala facilmente, mas exige cuidados adicionais com revogação e segurança do armazenamento do token no cliente.

RBAC na prática

Role-Based Access Control atribui permissões a papeis, não diretamente a usuários.

RBAC e o modelo de autorização mais comum em sistemas corporativos. Em vez de atribuir permissões diretamente a cada usuário, você define papeis como admin, editor e viewer, e atribui permissões a esses papeis. Cada usuário recebe um ou mais papeis. Quando o usuário tenta acessar um recurso, o sistema verifica se algum dos papeis do usuário tem permissão para aquela ação. A vantagem e a simplicidade de gestão: para mudar as permissões de um grupo de usuários, basta alterar as permissões do papel. RBAC funciona muito bem para sistemas com estruturas de permissão relativamente estaticas. Em sistemas SaaS multi-tenant, e comum ter papeis por tenant: o mesmo usuário pode ser admin em uma organização e apenas viewer em outra.

ABAC para permissões complexas

ABAC concede acesso baseado em atributos do usuário, do recurso e do contexto.

Attribute-Based Access Control e uma evolução do RBAC para cenários onde as permissões dependem de mais do que apenas o papel do usuário. Em ABAC, a decisão de acesso e baseada em políticas que avaliam atributos: atributos do usuário como departamento e nível de senioridade, atributos do recurso como classificação de confidencialidade, e atributos de contexto como horário de acesso e IP de origem. Por exemplo: um gerente pode editar documentos do seu departamento criados nos últimos 30 dias, mas apenas durante horário comercial. Esse nível de granularidade e impossível com RBAC puro. ABAC e mais poderoso, mas também mais complexo de implementar e auditar, sendo justificado apenas em sistemas com regras de acesso realmente dinamicas.

MFA e 2FA

Múltiplos fatores de autenticação tornam o acesso muito mais difícil de comprometer.

Autenticação de múltiplos fatores combina dois ou mais elementos distintos para verificar identidade: algo que você sabe como senha, algo que você tem como celular ou token fisico, e algo que você e como biometria. 2FA, autenticação de dois fatores, e o caso mais comum: usuário insere a senha e também um código temporário enviado por SMS, email ou gerado por um app como Google Authenticator. Mesmo que a senha seja comprometida, o atacante precisa também do segundo fator. MFA e considerado obrigatório em sistemas financeiros, de saude e qualquer sistema com dados sensíveis. A implementação mais comum hoje e TOTP, Time-based One-Time Password, via apps autenticadores, que gera códigos validos por 30 segundos usando um segredo compartilhado entre o app e o servidor.

OAuth vs autenticação própria

OAuth delega autenticação para provedores confiáveis como Google e GitHub.

OAuth 2.0 e um protocolo de autorização delegada que permite que um usuário conceda acesso limitado a seus recursos em um serviço a outro serviço, sem compartilhar credenciais. Na prática, e o que acontece quando você clica em Login com Google: você se autentica no Google, e o Google informa ao aplicativo que você e quem diz ser. O aplicativo nunca ve sua senha do Google. OAuth resolve um problema real: usuários reutilizam senhas, e cada novo sistema que armazena senhas e um potencial vetor de ataque. Ao delegar autenticação para provedores como Google, GitHub ou Microsoft, você elimina a responsabilidade de armazenar e proteger senhas, aproveitando a infraestrutura de segurança de nível enterprise desses provedores.

Exemplo em SaaS multi-tenant

RBAC por tenant garante isolamento de dados entre diferentes organizações.

Em um SaaS multi-tenant, o isolamento de dados entre organizações e crítico. Um usuário da empresa A não pode acessar dados da empresa B, mesmo que ambos sejam autenticados. A implementação típica combina autenticação por token com RBAC por tenant: o token contem o userId e o tenantId. Cada requisição verifica se o recurso solicitado pertence ao tenant do usuário. Os papeis são definidos por tenant: um usuário pode ser admin na empresa A e não ter acesso algum na empresa B. O controle de acesso precisa ser aplicado em todas as camadas: API, serviço e banco de dados. Um erro comum e filtrar pelo tenantId apenas na camada de API mas esquecer de filtrar nas queries do banco, deixando dados de outros tenants acessíveis por manipulação de requisições.

Quando usar cada abordagem

Session para web simples, token para APIs, RBAC para a maioria, ABAC para permissões complexas.

Session-based auth funciona bem para aplicações web tradicionais com poucos servidores e usuários internos. Token-based com JWT e a escolha para APIs, microservicos, apps mobile e qualquer sistema horizontalmente escalado. RBAC e suficiente para a maioria dos sistemas com estrutura de permissões relativamente simples e estável. ABAC faz sentido quando as permissões dependem de contexto dinâmico que RBAC não consegue expressar. OAuth e OpenID Connect fazem sentido quando você quer delegar autenticação para um provedor externo ou quando terceiros precisam acessar recursos em nome dos usuários. MFA e obrigatório para sistemas com dados sensíveis independentemente do modelo de autenticação base escolhido.

Vantagens e cuidados

Boas práticas de autenticação e autorização protegem dados e constroem confianca.

As principais vantagens de implementar autenticação e autorização corretamente: proteção de dados dos usuários, compliance com LGPD e outras regulações, redução de risco de violações de dados e construção de confianca. Os cuidados: nunca armazenar senhas em texto plano, usar bcrypt ou Argon2 para hash; tokens JWT não devem conter dados sensíveis pois o payload e apenas codificado em Base64, não criptografado; implementar revogação de tokens para casos de logout e comprometimento de conta; definir expiração curta para access tokens e usar refresh tokens para renovação; e auditoria de acessos para detectar comportamentos suspeitos antes que causem incidentes reais.

Resumo

Autenticação e autorização são as duas pilastras da segurança de qualquer sistema.

Autenticação verifica identidade. Autorização verifica permissões. Os dois processos são distintos e precisam ser implementados de forma explícita e correta. Session-based auth e simples mas não escala bem horizontalmente. Token-based com JWT e stateless e ideal para APIs e microservicos. RBAC atende a maioria dos sistemas; ABAC serve para permissões complexas baseadas em contexto. OAuth delega autenticação para provedores externos. MFA adiciona uma camada extra de proteção indispensável para dados sensíveis. Implementar esses mecanismos corretamente não e um diferencial competitivo: e o mínimo esperado de qualquer sistema que lida com dados de usuários em 2026.

Tutoriais em Video

Conceitos-chave

Autenticação

verificar QUEM você e, login com usuário e senha, biometria, token

Autorização

verificar O QUE você pode fazer, permissões e papeis após autenticar

RBAC

Role-Based Access Control, permissões baseadas em papeis: admin, editor, viewer

ABAC

Attribute-Based Access Control, permissões baseadas em atributos do usuário, recurso e contexto

Session-based auth

servidor guarda estado da sessão, simples mas não escala bem horizontalmente

Token-based auth

cliente guarda o token, stateless, escala facilmente, ideal para APIs e microservicos

Segurança no Instagram

@bytebytego

Reels, Autenticação e Autorização

@bytebytego

No Facebook

Segurança no X (Twitter)

@mjovanovictech

Software architecture patterns explained

Ver post completo no X →
@mjovanovictech

System design best practices

Ver post completo no X →
@mjovanovictech

Domain events and distributed systems

Ver post completo no X →
@mjovanovictech

Building resilient distributed systems

Ver post completo no X →
@mjovanovictech

Microservices vs monolith decisions

Ver post completo no X →
@mjovanovictech

Software design fundamentals

Ver post completo no X →

O que devs dizem

Ana F. ★★★★★

Passei anos confundindo autenticação com autorização no código. Depois de um incidente onde um usuário comum conseguiu acessar dados de admin por falta de verificação de permissão, refizemos todo o sistema de autorização com RBAC explícito. A diferença na segurança foi imediata e mensurável.

Marco V. ★★★★☆

Implementar ABAC foi complexo, mas necessário. Nosso sistema juridico tem permissões que dependem do tipo de documento, do perfil do advogado, da fase do processo e do horário. RBAC puro não conseguia expressar essas regras. ABAC com Casbin resolveu o problema de forma elegante.

Helena R. ★★★★★

Migrar de session para JWT em nosso sistema com 10 instâncias foi a melhor decisão arquitetural do ano. Eliminamos o Redis de sessões, reduzimos a latência e simplificamos o deploy. O cuidado com a expiração curta e refresh token foi o maior desafio, mas o resultado valeu muito.