O que é autenticação? Logins, sessões e OAuth explicados
Autenticação é como um app confirma quem é o usuário — normalmente verificando algo que a pessoa sabe (uma senha), algo que ela tem (um código enviado ao celular ou ao e-mail) ou uma identidade de outro serviço confiável (como "Entrar com o Google"). Depois que o usuário é autenticado, o app o reconhece com uma sessão ou um token, para que ele não precise fazer login em cada página. Decidir o que esse usuário conhecido pode fazer é uma etapa separada, chamada autorização.
Por que isso importa quando você cria com IA
Adicionar login é um dos pedidos mais comuns feitos a um criador de apps com IA, e um dos mais fáceis de errar de forma sutil. Uma página de login é simples de gerar. A parte difícil é tudo o que está ao redor:
- As senhas estão armazenadas com segurança?
- Toda página privada e todo endpoint da API realmente verifica quem está pedindo?
- Um cliente logado consegue ver os dados de outro cliente apenas trocando um número na URL?
- O que acontece quando alguém esquece a senha?
Um app pode parecer perfeitamente seguro e falhar em todos esses pontos. Entender as partes móveis permite fazer as perguntas certas e testar as coisas certas.
Uma analogia do dia a dia
Pense em fazer check-in em um hotel.
Na recepção você mostra um documento. Isso é autenticação: provar quem você é. A recepcionista então entrega um cartão de acesso. Esse cartão é a sua sessão: pelo resto da estadia você não precisa mostrar o documento de novo; basta aproximar o cartão.
O cartão abre o seu quarto, a academia e o elevador até o seu andar — mas não os quartos de outros hóspedes nem a sala da equipe. Isso é autorização: aquilo a que a sua identidade tem permissão de acessar. Se você perder o cartão, o hotel pode desativá-lo na recepção (revogar a sessão). Quando você faz o check-out, ele deixa de funcionar (logout ou expiração).
"Entrar com o Google" é como um hotel aceitar uma carta de um parceiro de confiança dizendo "esta é a pessoa", em vez de conferir o seu documento por conta própria.
Os principais métodos de login
| Método | Como funciona | Vantagens | Desvantagens |
|---|---|---|---|
| E-mail + senha | O usuário escolhe uma senha; o app guarda um hash dela | Familiar, sem dependência externa | Você precisa guardar os hashes com segurança e tratar as redefinições |
| Link mágico / código de uso único | O app envia por e-mail um link ou código que faz login | Nenhuma senha para vazar ou esquecer | Depende da entrega do e-mail; login mais lento |
| Login social (OAuth / OpenID Connect) | O usuário entra com Google, Apple, GitHub etc. | Rápido para o usuário; você não guarda senha | Configuração em cada provedor; usuários sem essas contas |
| Provedor de autenticação hospedado | Um serviço como Clerk, Auth0 ou Supabase Auth cuida do cadastro, login e redefinições | Menos trabalho de segurança para você | Custo mensal em escala; mais uma dependência |
| Autenticação em múltiplos fatores (MFA / 2FA) | Uma segunda verificação depois da primeira, como um código de app autenticador | Muito mais difícil de invadir | Um pouco mais de atrito |
Como as senhas devem ser armazenadas
Um app seguro nunca guarda a sua senha real. Em vez disso, guarda um hash: o resultado de uma função unidirecional que transforma a senha em uma sequência fixa. Quando você faz login, o app aplica o hash ao que você digitou e compara o resultado com o hash guardado.
Dois detalhes tornam isso seguro:
- Um salt — um valor aleatório acrescentado a cada senha antes do hash, de modo que duas pessoas com a mesma senha recebam hashes diferentes, e tabelas de consulta pré-calculadas deixam de servir.
- Um algoritmo lento feito para senhas — como Argon2, bcrypt ou scrypt. Hashes de uso geral, como MD5 ou SHA-256, são rápidos demais por conta própria; atacantes conseguem testar bilhões de palpites.
Hash não é o mesmo que criptografia. Dados criptografados podem ser descriptografados com uma chave; um hash de senha é projetado para não ser reversível de forma alguma.
Sessões vs tokens
Depois do login, o app precisa reconhecer você em cada requisição. Existem duas abordagens comuns.
| Sessão (cookie) | Token (ex.: JWT) | |
|---|---|---|
| O que o navegador guarda | Um ID de sessão aleatório em um cookie | Um token assinado contendo informações do usuário e uma expiração |
| Onde fica o estado do login | No servidor, em um banco de dados ou armazenamento | Dentro do próprio token |
| Desconectar alguém de todos os lugares | Fácil: apagar a sessão no servidor | Mais difícil: o token continua válido até expirar, a menos que você mantenha uma lista de bloqueio |
| Uso típico | Apps web tradicionais | APIs, apps mobile, serviços que conversam entre si |
Para cookies, três configurações importam: HttpOnly (o JavaScript da página não consegue ler o cookie), Secure (enviado somente por HTTPS) e SameSite (limita o envio em requisições vindas de outros sites). Guardar tokens no localStorage do navegador é comum, mas os expõe a qualquer script que rode na página.
OAuth e "Entrar com o Google"
OAuth 2.0 é um padrão para autorização delegada: ele permite que um app obtenha acesso limitado à sua conta em outro serviço — por exemplo, ler a sua agenda do Google — sem nunca ver a sua senha do Google. Você é enviado ao Google, aprova permissões específicas (chamadas escopos), e o Google dá ao app um token apenas para essas permissões.
O OAuth, sozinho, foi projetado para conceder acesso, não para dizer quem você é. O OpenID Connect (OIDC) é uma camada sobre o OAuth 2.0 que acrescenta identidade, e é isso que o "Entrar com o Google" ou "Entrar com a Apple" usa. Para configurar, você registra seu app no provedor e obtém um client ID e um client secret; o secret fica no seu servidor.
Um exemplo prático: login para um portal de clientes
Suponha que você está criando um portal onde os clientes de uma agência de design veem seus projetos e faturas.
- Autenticação: os clientes entram com e-mail e um link mágico, então não há senhas para gerenciar. A equipe da agência entra com contas do Google Workspace.
- Papéis: cada usuário tem um papel —
clientoustaff. - Regras de autorização:
| Ação | Cliente | Equipe |
|---|---|---|
| Ver os projetos da própria empresa | Sim | Sim |
| Ver projetos de outras empresas | Não | Sim |
| Enviar um arquivo para um projeto | Somente projetos próprios | Sim |
| Marcar uma fatura como paga | Não | Sim |
- Onde é aplicado: no servidor, em cada requisição. O servidor busca o usuário logado e só devolve os projetos em que
project.company_idcorresponde à empresa do usuário. Esconder o botão "Marcar como paga" não basta — o endpoint em si precisa recusar.
Termos comuns explicados
| Termo | Significado |
|---|---|
| Autenticação (AuthN) | Confirmar quem a pessoa é. |
| Autorização (AuthZ) | Decidir o que ela pode fazer. |
| Sessão | O app lembrar que você está logado entre as requisições. |
| Cookie | Um pequeno dado que o navegador envia de volta ao site a cada requisição. |
| JWT | JSON Web Token: um token compacto e assinado que carrega informações como ID do usuário e expiração. |
| Papel / permissão | Rótulos como admin ou member que definem o acesso. |
| MFA / 2FA | Exigir uma segunda prova, como um código de um app autenticador. |
| SSO | Single sign-on: um único login (muitas vezes uma conta corporativa) para vários apps. |
| 401 vs 403 | "Quem é você?" (não autenticado) vs "Você não pode fazer isso" (não autorizado). |
Erros comuns e equívocos
- Verificar permissões apenas na página. Se o navegador esconde um botão mas a API não verifica, qualquer pessoa pode chamar a API diretamente.
- Confiar em IDs vindos da URL.
/invoices/1042precisa verificar que a fatura 1042 pertence ao usuário logado. - Criar a própria criptografia. Use bibliotecas ou provedores conhecidos; não deixe a IA inventar um esquema de hash.
- Redefinição de senha fraca. Os links de redefinição devem ser de uso único, expirar rapidamente e não revelar se um e-mail tem conta.
- Confundir o seu login com o do criador da ferramenta. Os usuários do seu app são separados da sua conta na ferramenta com que você constrói.
- Nenhum limite de tentativas no login. Sem ele, atacantes podem testar senhas sem parar.
O que pedir ao seu criador de apps com IA
- "Adicione cadastro e login usando [uma biblioteca ou provedor conhecido]. Não escreva hash de senha personalizado."
- "Armazene as senhas com hash usando bcrypt ou Argon2."
- "Use cookies HttpOnly e Secure para a sessão."
- "Adicione papéis: admin e member. Liste cada endpoint e quais papéis podem chamá-lo."
- "Garanta no servidor que os usuários só leiam e editem os próprios registros. Depois me mostre como você verificou."
- "Adicione redefinição de senha com links de uso único que expirem em uma hora."
- "Limite a taxa de tentativas de login."
Depois, teste você mesmo: crie duas contas e tente acessar os dados de uma delas estando logado com a outra. Nosso guia para adicionar login e nosso checklist de segurança vão além.
Autenticação no Mythex
O Mythex não oferece um produto de autenticação embutido para os usuários do seu app; você escolhe a abordagem — e-mail e senha guardados no banco de dados do seu projeto, ou o SDK de um provedor hospedado — e pede ao agente para adicioná-la. As chaves do provedor vão para os segredos do projeto, não para o chat. Isso é separado de como você entra no próprio Mythex. A receita da documentação sobre como adicionar login ao seu app tem um prompt inicial que você pode adaptar, e o que é uma API explica onde ficam essas verificações feitas no servidor.
Perguntas
Qual é a diferença entre autenticação e autorização?
A autenticação verifica quem você é, por exemplo confirmando sua senha. A autorização decide o que você pode fazer depois de identificado, como se pode ver a página de administração ou editar a reserva de outra pessoa. Os apps precisam dos dois.
O que é OAuth?
OAuth 2.0 é um padrão que permite a um app obter acesso limitado à sua conta em outro serviço sem nunca ver a sua senha. "Entrar com o Google" usa o OpenID Connect, uma camada de identidade construída sobre o OAuth 2.0, então o app descobre quem você é pelo Google.
Meu app deve armazenar senhas?
Nunca em forma legível. Se você usa login com e-mail e senha, as senhas devem ser armazenadas como hashes com salt, gerados por um algoritmo lento projetado para senhas, como Argon2 ou bcrypt. Muitos apps evitam o problema usando um provedor de autenticação hospedado, login social ou links mágicos por e-mail.
Sessões ou tokens — qual o meu app deve usar?
Os dois funcionam. Uma sessão guarda o estado do login no servidor e entrega ao navegador um ID aleatório em um cookie, que é fácil de revogar. Um token, como um JWT, carrega as informações assinadas em si mesmo, o que combina com APIs e clientes mobile, mas é mais difícil de cancelar antes de expirar. Para um app web típico, sessões com cookie são um padrão sólido.