O que é OAuth: autorização sem entregar senha
O que é OAuth e como a autorização delegada deixa um app acessar dados com consentimento, sem você entregar a senha da conta.
Neste artigo
OAuth é um framework de autorização que permite a um aplicativo obter acesso limitado a um serviço HTTP em nome do usuário, ou em nome próprio, sem receber a senha desse usuário. Em vez da senha, o aplicativo recebe um token de acesso com escopo e validade definidos, depois da aprovação do dono do recurso no servidor de autorização.
Você clica em “continuar com Google” ou “conectar calendário” e o site pede permissão para ler eventos, sem pedir a senha da conta grande. A cena parece simples, porém o que acontece nos bastidores é um acordo de confiança entre quatro papéis técnicos, e qualquer falha nessa cadeia pode virar acesso indevido.
Quem pesquisa o tema costuma misturar login, permissão e “senha do app”. Este verbete separa essas ideias, mostra o caminho mais usado hoje e aponta onde o benefício da comodidade encontra custo de implementação, risco de vazamento de token e dever de cuidado com dado pessoal.
Como o OAuth funciona na vida real#
OAuth organiza a autorização delegada em papéis claros. O dono do recurso (quase sempre você) decide o que pode ser compartilhado. O cliente é o aplicativo que pede acesso. O servidor de autorização autentica o dono e emite credenciais limitadas. O servidor de recurso guarda os dados e só atende quem apresenta um token válido. A especificação OAuth 2.0 da RFC 6749, publicada em outubro de 2012, descreve esse modelo e deixa explícito que o cliente não deve operar com a senha do usuário.
Imagine um serviço de impressão que precisa ler fotos do seu álbum online. Sem OAuth, a impressora pediria usuário e senha do álbum, e qualquer comprometimento da impressora exporia a conta inteira. Com OAuth, você autentica no servidor confiável do álbum, aprova um escopo estreito (por exemplo, só leitura de pastas marcadas) e a impressora recebe um token de acesso com vida útil e limites. Se a impressora for invadida depois, o dano tende a ficar no escopo e no prazo daquele token, e não na senha mestra.
Além disso, o protocolo nasce para HTTP e para integração com API protegida. O cliente chama a API com o token, o servidor de recurso valida a autorização representada por ele e responde. Por outro lado, token válido não significa que o app possa fazer qualquer coisa. Escopo amplo demais, redirect mal configurado ou armazenamento frágil do segredo do cliente destroem a proteção que o desenho promete.
Na prática, o que eu vejo com mais frequência é time de produto tratar o botão de “conectar conta” como feature de UX e só depois descobrir que falta registrar redirect exato, validar estado da sessão e limitar escopo. Quem começa pelo desenho dos papéis e pelo menor conjunto de permissões evita retrabalho caro.
OAuth autentica ou autoriza o usuário?#
OAuth, sozinho, autoriza acesso a recursos. Ele não foi feito para ser o protocolo completo de “quem é você” em todo produto. Autenticação é provar identidade. Autorização é decidir o que essa identidade, ou o cliente em nome dela, pode fazer. Por isso muitos produtos usam OAuth como base e acrescentam openid connect quando precisam de login federado com identidade verificável.
A documentação da MDN sobre identidade federada deixa a relação em termos práticos. O openid connect monta uma camada de autenticação sobre o oauth 2.0, devolve um ID token com afirmações sobre o usuário e permite que o aplicativo confiante inicie sessão sem reinventar o cadastro. Enquanto isso, o access token continua servindo à chamada de API, e o ID token serve à decisão de login.
Há um custo escondido nessa combinação. Se o time usa só OAuth e trata o access token como prova de identidade, nasce um buraco clássico. O token pode ser válido para um recurso e ainda assim não trazer as claims que o produto precisa para saber quem entrou, com que nível de garantia e para qual público. Assim, login social feito de qualquer jeito pode parecer autenticação e, na verdade, só delegar um pedaço de autorização.
E se o seu caso for só máquina falando com máquina, sem usuário na tela? Aí entra o fluxo de credenciais do cliente, em que o próprio aplicativo age em nome próprio. Esse caminho é útil para jobs e integrações internas, porém não substitui o consentimento humano quando o dado é de uma pessoa. E se você já tem senha local forte e autenticação de dois fatores? OAuth continua útil para conectar serviços terceiros, sem abandonar o fator local.
Muita gente acha que OAuth “é o login”, e quase sempre está enganada, porque o núcleo do framework é autorização. Quando a pergunta do negócio é identidade e sessão, o desenho maduro costuma ser OAuth mais openid connect, com validação séria de tokens e política clara de sessão.
Afinal, o que é OAuth e o que não é?#
Em uma frase de trabalho, o que é OAuth muda pouco. Trata-se do acordo técnico para conceder acesso limitado sem compartilhar senha. O que ele não é fica tão importante quanto. Não é antivírus, não é garantia de privacidade sozinha e não elimina a necessidade de HTTPS no transporte. Também não decide sozinho se o tratamento de e-mail, foto ou calendário respeita a Lei 13.709/2018 (LGPD), cujo texto compilado no Planalto exige finalidade determinada e base legal adequada para dado pessoal.
Quais fluxos de OAuth importam no oauth 2.0#
No oauth 2.0 histórico da RFC 6749 aparecem vários tipos de concessão. Na operação moderna, o fluxo de autorização com código é o eixo. O aplicativo redireciona o usuário ao servidor de autorização, o usuário aprova, o servidor devolve um código de curta duração e o aplicativo troca esse código, no backend, por tokens. Em clientes públicos (app móvel, SPA e outros que não guardam segredo de forma confiável), o complemento decisivo é o PKCE, definido na RFC 7636 de setembro de 2015. O cliente gera um verificador de alta entropia, envia um desafio derivado na autorização e só consegue trocar o código se apresentar o verificador correspondente. Sem isso, um código interceptado no redirect pode ser resgatado por outro processo.
Por que fluxos antigos viraram armadilha#
O fluxo implícito e o fluxo de senha do dono do recurso surgiram para cenários antigos e hoje são tratados como legado perigoso em guias de segurança. O implícito entrega token no front channel e aumenta superfície de vazamento. O fluxo de senha treina o usuário a digitar a credencial no cliente, o que desfaz a separação que o OAuth existe para criar. A folha de dicas OAuth 2 da OWASP recomenda, na prática atual, o fluxo de código de autorização com PKCE para a maioria dos clientes, inclusive SPA e nativo.
Apps nativos têm um segundo cuidado. A orientação consolidada da comunidade IETF para apps nativos (RFC 8252, outubro de 2017) recomenda abrir a autorização no agente externo do sistema (em geral o navegador), e não em webview embutida que o app hospeda. O webview facilita copiar credenciais e cookies, e ainda força o usuário a autenticar do zero em cada app. O browser externo preserva sessão e reduz a chance do app host espionar a autenticação.
Se fosse comigo, eu escolheria o fluxo de código reforçado por prova de troca como padrão do projeto novo e só abriria exceção documentada para credenciais de cliente em integração máquina a máquina. Pagar o custo de uma biblioteca madura e de testes de redirect costuma sair mais barato do que remendar um fluxo “rápido” depois do primeiro incidente.
O que são token de acesso, refresh e escopos#
O token de acesso é a credencial que o cliente apresenta ao servidor de recurso. Ele carrega, de forma implícita ou explícita, atributos como escopo, público-alvo e validade. No uso Bearer definido pela RFC 6750, qualquer parte que possua o token pode usá-lo. Por isso transporte sem HTTPS, log que grava cabeçalho Authorization e armazenamento em lugar legível por scripts aumentam o dano de um vazamento.
O refresh token serve para pedir novos access tokens sem repetir o consentimento a cada expiração. Isso melhora a experiência offline e reduz atrito, porém concentra poder. Quem rouba o refresh pode prolongar o acesso. Por isso aparecem práticas como rotação de refresh, vínculo criptográfico ao cliente e escopo menor no access do que o usuário autorizou no consentimento.
Escopo é a linguagem do pedido. Pedir leitura de calendário é diferente de pedir escrita e de pedir perfil completo. Provedores reais documentam papéis e tipos de token (access, ID e refresh) no desenho oauth 2.0 com openid connect. No entanto, escopo bem nomeado não substitui autorização fina no servidor de recurso. O token pode dizer “leu calendário” e a API ainda precisa bloquear o calendário de outra pessoa.
Exemplo concreto com premissas explícitas. Premissas, em outubro de 2026, para um app de planejamento de estudos. O app pede só leitura de eventos futuros por 30 dias. O access token vive 60 minutos. O refresh fica só no backend, cifrado em repouso. Se um atacante copia o access token de um log, a janela útil é curta. Se o mesmo atacante copia o refresh do disco do servidor, a janela cresce até a revogação. O benefício da renovação silenciosa vem acompanhado da obrigação de proteger esse segundo segredo como se fosse chave de conta.
O erro que mais custa caro aqui é pedir escopo “por precaução” e guardar refresh no frontend. O usuário aprova um pedido genérico, o time ganha velocidade na demo e, meses depois, qualquer XSS ou extensão maliciosa encontra material de longo prazo. Menos escopo e menos superfície de armazenamento costumam ser a escolha adulta.
Quais riscos o OAuth não elimina sozinho#
OAuth reduz o compartilhamento de senha, porém não remove phishing de tela de consentimento, open redirect, cliente malicioso registrado com aparência legítima nem erro de validação de token. Golpes de engenharia social exploram o hábito de clicar em “permitir” sem ler o escopo. Por isso o texto da tela de consentimento e a marca do servidor de autorização importam tanto quanto a criptografia do canal.
Há risco de implementação do lado do cliente e do servidor. Redirect URI frouxa, ausência de parâmetro de estado na sessão, falta de PKCE, aceitar token sem checar emissor, audiência e expiração, e misturar papéis de servidor de autorização com servidor de recurso sem controles claros aparecem em testes e em incidentes. A OWASP trata OAuth e OIDC como área própria de verificação justamente porque a complexidade do protocolo cria falhas sutis.
Do ponto de vista de privacidade no Brasil, conectar contas costuma implicar tratamento de dado pessoal. Consentimento genérico e sem finalidade clara conflita com a lógica da LGPD. OAuth pode ser o meio técnico do compartilhamento, mas a base legal, a transparência e a possibilidade de revogar o acesso são decisões de produto e de conformidade. Revogar no provedor e apagar tokens locais são passos operacionais que o texto de UX deveria deixar óbvios.
Quando reviso integrações do dia a dia, o padrão de falha não é “OAuth é inseguro”. O padrão é OAuth bem anunciado e mal amarrado, com bibliotecas desatualizadas, secrets em repositório e ausência de monitoramento de uso anômalo de token. Tratar token como senha de curta duração muda o nível de cuidado da equipe.
Quando faz sentido adotar OAuth no seu produto#
Faz sentido quando há recurso protegido em HTTP, um dono capaz de consentir e um cliente que precisa de acesso limitado e revogável. Conectar e-mail, nuvem de arquivos, anúncios, analytics ou CRM de terceiros é o terreno natural. Também faz sentido em plataformas que querem botão de entrar com conta externa para reduzir fricção de cadastro, desde que a identidade venha com openid connect e a sessão local seja desenhada com critério.
Nem sempre vale a pena. Se o seu sistema é fechado, sem terceiros e sem necessidade de delegação, um modelo de sessão própria com boa higiene pode ser mais simples de operar. OAuth traz dependência de disponibilidade do provedor, complexidade de renovação de token, superfície de configuração e custo de suporte quando o usuário revoga no lugar errado. Em ambientes regulados, ainda entra a análise de transferência e de subprocessamento de dado.
Para o leitor que só consome apps, o critério prático é outro. Antes de aprovar, leia o escopo, prefira o mínimo necessário e revogue acessos antigos nas configurações de segurança da conta. Combine isso com 2FA na conta principal e com desconfiança de páginas que pedem senha fora do domínio conhecido do provedor. A comodidade do clique único só se sustenta se a conta âncora estiver bem protegida.
Do lado de quem opera o sistema, eu começaria por inventário de integrações, mapa de escopos reais em uso e prova de que refresh tokens não vazam para o navegador. Em seguida viria a escolha de biblioteca mantida, testes automatizados do callback e um runbook de revogação. Sem isso, “temos OAuth” vira slogan, não controle.
Termos relacionados#
- API (interface de programação de aplicações) é o destino típico do token OAuth quando o cliente chama recursos protegidos.
- HTTPS é o transporte esperado para autorização, troca de código e uso de bearer token sem exposição em claro.
- autenticação de dois fatores (2FA) fortalece a conta no servidor de autorização, que é o ponto em que a identidade é comprovada antes do consentimento.
- criptografia aparece na proteção de segredos, desafios PKCE e, em desenhos avançados, no vínculo do token ao cliente.
- cookie de navegador costuma carregar a sessão no servidor de autorização durante o redirect, e por isso misturar webview insegura com OAuth aumenta risco.
- JSON é o formato comum de respostas de token e de claims em tokens estruturados usados com openid connect.
Perguntas frequentes sobre OAuth#
As dúvidas abaixo cobrem o ponto em que a teoria encontra a decisão do dia a dia. Elas ajudam quem compara OAuth com login comum, quem precisa escolher fluxo e quem quer saber o que fazer depois de autorizar um aplicativo terceiro. As respostas são autossuficientes e evitam jargão solto.
O que é OAuth em uma frase útil para o leigo?#
OAuth é o mecanismo que deixa um aplicativo usar parte da sua conta em outro serviço depois que você aprova, sem você entregar a senha da conta principal. O aplicativo recebe permissão limitada no tempo e no escopo, e essa permissão pode ser revogada. O ganho de comodidade existe, porém depende de consentimento consciente e de implementação correta dos dois lados.
OAuth 2.0 e openid connect são a mesma coisa?#
Não. O oauth 2.0 cobre autorização e emissão de tokens de acesso a recursos. O openid connect adiciona camada de autenticação e identidade sobre essa base, com ID token e fluxos voltados a login. Muitos botões de login social usam os dois juntos. Se o seu produto só precisa chamar API em nome do usuário, OAuth pode bastar. Se precisa saber quem entrou com garantia interoperável, openid connect entra no desenho.
Posso confiar em qualquer tela de “permitir acesso”?#
Não de forma cega. Confira o domínio do servidor de autorização, o nome do aplicativo e o escopo pedido. Pedidos amplos sem necessidade clara são sinal de alerta. Além disso, desconfie de páginas que pedem senha fora do fluxo esperado do provedor. OAuth bem feito reduz o compartilhamento de senha, no entanto não impede phishing que copia a estética da tela de consentimento.
O que fazer se eu autorizar um app por engano?#
Revogue o acesso na área de segurança ou de aplicativos conectados da conta do provedor, troque a senha se houver suspeita de phishing clássico e revise se 2FA está ativo. No aplicativo terceiro, encerre sessões e apague tokens locais se você for o administrador. Em seguida, monitore atividade estranha na conta âncora por alguns dias. A velocidade da revogação importa mais do que o discurso técnico depois do erro.
App móvel pode usar o mesmo fluxo de site?#
Pode e, na orientação atual, deve seguir o fluxo de código com prova PKCE e abertura no browser do sistema, conforme a linha da RFC 8252. Webview embutida parece integrada, porém piora a segurança e a usabilidade. O custo é um pouco mais de engenharia de deep link e de testes em iOS e Android. Em troca, você evita o anti-padrão de capturar credenciais dentro do próprio app.
Token de acesso expirado significa que perdi a integração?#
Nem sempre. Se existir refresh token válido e o escopo ainda estiver autorizado, o cliente pode pedir um novo access token sem nova interação. Se o refresh foi revogado, expirou ou nunca foi emitido, a integração cai até novo consentimento. Por isso produtos sérios tratam expiração como evento esperado e desenham reautorização clara, em vez de falhar com erro opaco para o usuário.
Conclusão#
Para a maioria dos produtos que precisam falar com contas e APIs de terceiros, OAuth com fluxo de código e PKCE é o caminho padrão, e openid connect entra quando a pergunta real é login e identidade. A alternativa de pedir senha do usuário a cada integração já nasceu errada do ponto de vista de risco e de confiança.
A resposta muda quando não há dono humano no fluxo, quando o sistema é fechado sem delegação ou quando a equipe não tem maturidade para operar secrets, redirects e revogação. Nesses casos, forçar OAuth por moda só adiciona complexidade sem benefício proporcional.
O primeiro passo útil é mapear qual recurso será acessado, qual escopo mínimo basta e onde os tokens vão viver. Depois disso, escolha biblioteca mantida, escreva testes do callback e revise periodicamente os apps conectados. Sem esse chão, a autorização delegada vira atalho frágil.
Este conteúdo sobre OAuth é informativo e geral. Não substitui análise de segurança, parecer sobre tratamento de dados pessoais sob a LGPD nem implementação auditada do seu sistema. Fluxos, bibliotecas e políticas de provedores mudam com o tempo. Confira a documentação oficial na data do seu projeto e, quando houver dado pessoal, busque orientação profissional habilitada.
Perguntas frequentes
- O que é OAuth em uma frase útil para o leigo?
- OAuth é o mecanismo que deixa um aplicativo usar parte da sua conta em outro serviço depois que você aprova, sem você entregar a senha da conta principal. O aplicativo recebe permissão limitada no tempo e no escopo, e essa permissão pode ser revogada. O ganho de comodidade existe, porém depende de consentimento consciente e de implementação correta dos dois lados.
- OAuth 2.0 e openid connect são a mesma coisa?
- Não. O oauth 2.0 cobre autorização e emissão de tokens de acesso a recursos. O openid connect adiciona camada de autenticação e identidade sobre essa base, com ID token e fluxos voltados a login. Muitos botões de login social usam os dois juntos. Se o seu produto só precisa chamar API em nome do usuário, OAuth pode bastar. Se precisa saber quem entrou com garantia interoperável, openid connect entra no desenho.
- Posso confiar em qualquer tela de “permitir acesso”?
- Não de forma cega. Confira o domínio do servidor de autorização, o nome do aplicativo e o escopo pedido. Pedidos amplos sem necessidade clara são sinal de alerta. Além disso, desconfie de páginas que pedem senha fora do fluxo esperado do provedor. OAuth bem feito reduz o compartilhamento de senha, no entanto não impede phishing que copia a estética da tela de consentimento.
- O que fazer se eu autorizar um app por engano?
- Revogue o acesso na área de segurança ou de aplicativos conectados da conta do provedor, troque a senha se houver suspeita de phishing clássico e revise se 2FA está ativo. No aplicativo terceiro, encerre sessões e apague tokens locais se você for o administrador. Em seguida, monitore atividade estranha na conta âncora por alguns dias. A velocidade da revogação importa mais do que o discurso técnico depois do erro.
- App móvel pode usar o mesmo fluxo de site?
- Pode e, na orientação atual, deve seguir o fluxo de código com prova PKCE e abertura no browser do sistema, conforme a linha da RFC 8252. Webview embutida parece integrada, porém piora a segurança e a usabilidade. O custo é um pouco mais de engenharia de deep link e de testes em iOS e Android. Em troca, você evita o anti-padrão de capturar credenciais dentro do próprio app.
- Token de acesso expirado significa que perdi a integração?
- Nem sempre. Se existir refresh token válido e o escopo ainda estiver autorizado, o cliente pode pedir um novo access token sem nova interação. Se o refresh foi revogado, expirou ou nunca foi emitido, a integração cai até novo consentimento. Por isso produtos sérios tratam expiração como evento esperado e desenham reautorização clara, em vez de falhar com erro opaco para o usuário.