Como o OAuth Funciona? Código de Autorização, PKCE e Tokens

Como o OAuth Funciona?

O Scrapeless Agent Browser fornece sessões de navegador em nuvem para interação autorizada com sites, enquanto sua aplicação continua responsável pelas permissões OAuth e tokens usados por suas integrações.

Como o OAuth Funciona?

OAuth permite que um aplicativo obtenha acesso limitado a um recurso protegido por meio de um servidor de autorização, sem exigir que o aplicativo colete a senha do proprietário do recurso. O aplicativo recebe um token de acesso que representa uma concessão aprovada e apresenta esse token ao servidor de recursos. O servidor de recursos decide se o token autoriza a operação solicitada.

OAuth é uma estrutura de autorização. Um botão de login familiar pode envolver OAuth, mas provar quem fez login requer um protocolo de identidade e suas regras de validação. Manter permissão e identidade separadas impede que uma aplicação trate qualquer troca de token bem-sucedida como evidência suficiente da identidade do usuário.

Resumo rápido

  • OAuth delega o acesso por meio de tokens. A permissão do aplicativo é limitada pela concessão e pela política do servidor.
  • Um código de autorização é trocado por tokens. O código não é a credencial usada para solicitações comuns de recursos.
  • PKCE vincula a troca ao cliente que a iniciou. O verificador deve permanecer associado à transação de autorização correta.
  • OAuth, sessões de login e chaves de API são mecanismos distintos. Siga o contrato de autenticação documentado de cada serviço.

Quem participa em um fluxo OAuth?

Um fluxo OAuth envolve um proprietário do recurso, um cliente, um servidor de autorização e um servidor de recursos. O proprietário do recurso pode conceder acesso. O cliente é o aplicativo que solicita esse acesso. O servidor de autorização avalia a solicitação e emite tokens. O servidor de recursos hospeda os dados ou a operação protegidos.

O Estrutura de autorização OAuth define esses papéis. Uma única organização pode operar ambas as funções de servidor, mas as responsabilidades permanecem diferentes. A autenticação bem-sucedida no servidor de autorização não concede automaticamente todas as operações no servidor de recursos.

Um escopo nomeia uma permissão solicitada dentro do vocabulário de um serviço. Uma integração de calendário pode solicitar permissão para ler eventos em vez de modificá-los. O provedor define o que esses nomes significam e se o usuário, o administrador ou outra política deve aprová-los. O cliente deve solicitar apenas o acesso de que seu propósito realmente precisa.

O tipo de cliente é importante. Uma aplicação de servidor geralmente pode proteger credenciais em um backend controlado. Código enviado para um navegador ou dispositivo móvel não pode tratar um segredo de cliente incorporado como confidencial. O registro do cliente e o fluxo selecionado devem refletir esse limite.

O que Acontece no Código de Autorização com PKCE?

O fluxo de código de autorização direciona o usuário para o servidor de autorização, retorna um código para o local de redirecionamento registrado do cliente e troca esse código por tokens. O PKCE adiciona um verificador e um desafio derivado para conectar a solicitação de autorização à troca posterior.

  1. O cliente cria uma nova transação de autorização, incluindo um verificador e seu desafio derivado, e registra o estado necessário para validar a resposta.
  2. O cliente envia o navegador para o servidor de autorização com a identidade de cliente registrada, o local de redirecionamento, as permissões solicitadas e o desafio.
  3. O servidor de autorização autentica o usuário conforme necessário e avalia o consentimento e a política.
  4. O servidor de autorização retorna um código de autorização para o local de redirecionamento permitido do cliente.
  5. O cliente valida a resposta e troca o código juntamente com o verificador no endpoint de token, usando a autenticação de cliente exigida quando aplicável.
  6. O cliente apresenta o token de acesso ao servidor de recursos pretendido para operações dentro da concessão.

O Mecanismo de desafio e verificador PKCE impede que a posse de um código interceptado, por si só, seja suficiente para concluir a troca quando o servidor aplica corretamente o vínculo. O verificador é específico para a transação. Ele não deve se tornar uma constante compartilhada do aplicativo.

PKCE não torna todas as outras validações opcionais. O cliente ainda deve usar o servidor correto, validar a resposta recebida, proteger seu estado de transação e obedecer às regras de redirecionamento. Use uma implementação OAuth mantida que corresponda ao provedor em vez de montar um fluxo a partir de trechos de código não relacionados.

O que significam tokens de acesso, atualização e ID?

Um access token autoriza o acesso a recursos, um refresh token pode obter tokens de acesso de substituição conforme a política do servidor, e um ID token transmite informações de autenticação no OpenID Connect. Esses tokens têm públicos e requisitos de validação diferentes. Substituir um pelo outro pode gerar erros de autorização ou falhas de segurança.

Um token de acesso pode ser opaco ou usar um formato estruturado. Não presuma que todo token OAuth seja um JWT ou que decodificar um token prove que ele é válido. O contrato do servidor de recursos determina como emissor, audiência, expiração, assinatura ou estado do token no lado do servidor devem ser verificados.

Um token de atualização é opcional. Sua emissão, requisitos de armazenamento, comportamento de rotação e revogação são específicos do provedor. Um cliente não deve presumir acesso indefinido apenas porque a concessão inicial foi bem-sucedida. Alterações de escopo e políticas da conta podem modificar quais operações posteriores são permitidas.

A camada de identidade do OpenID Connect define tokens de ID e declarações de autenticação em cima do OAuth. Um cliente que use início de sessão deve validar a resposta de identidade de acordo com esse protocolo e a configuração do seu provedor.

Quais Limites o Cliente Deve Proteger?

O cliente deve proteger o tratamento de redirecionamentos, a associação de transações, as credenciais e o destino de cada token. Uma integração OAuth é uma sequência de decisões de confiança, não apenas uma cadeia de solicitações HTTP. Um token destinado a uma API não deve ser encaminhado para um serviço não relacionado apenas porque ambos aceitam um cabeçalho de autorização.

O Melhor Prática Atual de Segurança do OAuth fornece a base de segurança atual para escolha de fluxos e defesas contra ataques. Clientes públicos devem usar PKCE; o uso de PKCE também é recomendado para clientes confidenciais. A correspondência de redirecionamento e a proteção contra injeção de resposta de autorização continuam sendo partes necessárias do design.

Armazene segredos do lado do servidor no repositório de segredos aprovado da implantação. Limite o acesso a tokens de atualização e evite colocar valores de tokens em URLs, logs, ferramentas de análise ou capturas de tela de suporte. Um código de autorização também pode ser sensível enquanto permanecer utilizável, portanto o registro de callbacks precisa de configuração cuidadosa.

Não escolha o grant de senha do proprietário do recurso como um atalho para coletar credenciais de usuário. As orientações de segurança atuais descartam esse grant. O consentimento do usuário e a política do administrador devem ser tratados por meio da experiência suportada pelo servidor de autorização.

Como o OAuth difere do login em navegador e de chaves de API?

Uma sessão de login em navegador mantém o estado do site, uma chave de API identifica o acesso sob a política de chaves de um serviço, e o OAuth representa um grant de autorização. Esses mecanismos podem aparecer em um mesmo fluxo de trabalho sem serem intercambiáveis. Cookies de site não se tornam automaticamente credenciais de API delegadas.

Scrapeless Agent Browser fornece o ambiente de navegador para interações que sua aplicação está autorizada a realizar. Ele não é um servidor de autorização para cada site que o navegador visita. Abrir uma página de consentimento não dá direito a uma automação de aprovar permissões além da instrução do usuário.

Os requisitos de tratamento de chave de API do Scrapeless descrevem como as credenciais de serviço Scrapeless são usadas e protegidas. Siga esse contrato de chave documentado em vez de adicionar um prefixo OAuth bearer ou tratar uma chave Scrapeless como um token emitido por um provedor não relacionado.

O padrão de implantação de trabalhador de coleção limitada (bounded collection worker) é relevante ao separar segredos de código de aplicação reutilizável. Uma integração OAuth de forma semelhante precisa de tratamento de credenciais em tempo de execução, controles de acesso e um limite claro entre o propósito do worker e as permissões concedidas a ele.

Como seria o design de uma integração delegada?

Uma integração delegada começa com uma ação de usuário definida e o menor conjunto de permissões útil. Considere uma aplicação de relatórios ilustrativa que lê a disponibilidade de agenda de um usuário. A aplicação registra seu callback permitido, seleciona o fluxo de autorização suportado pelo provedor e solicita a permissão necessária para disponibilidade em vez de ampla administração da conta.

Após o callback, o backend valida a transação e armazena com segurança o material de credencial permitido. Uma requisição de recurso direciona a API pretendida e é avaliada sob o escopo concedido. A aplicação registra o status da conexão sem expor o token em logs voltados ao usuário.

A desconexão precisa de um design explícito. Remova credenciais armazenadas localmente e use os controles de revogação suportados pelo provedor quando apropriado. Explique aos usuários se desconectar a aplicação também revoga a permissão no servidor. Essas ações são relacionadas, mas nem sempre têm efeitos idênticos.

Teste consentimento negado, callbacks incompatíveis, estado de transação expirado e escopo insuficiente junto com o caminho bem-sucedido. Um ambiente de teste controlado do provedor pode verificar o comportamento sem tratar uma sequência ilustrativa como uma execução real de autorização. Nenhum grant de conta real é afirmado por este exemplo conceitual.

Conclusão

Acompanhe o OAuth seguindo o grant de permissão: quem o aprovou, qual cliente o recebeu, qual recurso o aceita e por quanto tempo ele permanece útil. Mantenha sessões de navegador e chaves de API de serviço separadas. Para um fluxo de trabalho baseado em navegador, revise Scrapeless pricing de forma independente das permissões e políticas de API do provedor de destino.

Coloque a Camada de Coleta em Prática

Escolha a capacidade de coleta Scrapeless que corresponda à sua fonte, depois aplique as decisões de validação e operação descritas acima.

Inscreva-se hoje e receba $5 em crédito gratuito — nenhum cartão de crédito necessário.

Resgate seus $5 de crédito →

FAQ

OAuth é um protocolo de login?

OAuth delega acesso; OpenID Connect acrescenta informações padronizadas de autenticação. Uma implementação de login precisa das regras de validação do protocolo de identidade em vez de presumir que um token de acesso identifica um usuário.

Um cliente público precisa de um client secret?

Um cliente público não consegue proteger de forma confiável um segredo incorporado. Use o fluxo de cliente público registrado com PKCE e os requisitos documentados do provedor em vez de tratar código distribuído como um repositório de segredos.

Todos os tokens OAuth são JWTs?

Não. Tokens de acesso podem ser opacos ou estruturados. Seu formato e validação dependem do servidor de autorização e do contrato com o servidor de recurso.

A automação de navegador pode conceder qualquer escopo solicitado?

Não. A automação deve permanecer dentro do propósito autorizado do usuário e da política do provedor. Uma tela de consentimento visível é uma decisão de permissão, não uma etapa de navegação rotineira.

Referências