Saltar para o conteúdo principal
Sistemas digitais15 min de leitura

OAuth para clientes públicos: o fluxo moderno que deve passar nos testes

RFC 9700 tornou explícita a linha de base atual: authorization code, PKCE para clientes públicos, correspondência exata de redirect URI, proteção contra mix-up e abandono do implicit e do password grant.

Atualizado
Natureza
Baseline de engenharia baseado em RFCs publicadas
Quem deve ler
Arquitetura, desenvolvimento, segurança de aplicações, IAM e QA
Publicado e verificado
4 de agosto de 2026
Limite
O perfil final depende do tipo de cliente, servidor de autorização, recursos e modelo de ameaça
Modelo físico de um fluxo OAuth com canais separados, pares de verificação e um token persimão
Um fluxo seguro prova origem, transação, destinatário e posse em cada fronteira.Imagem gerada por IA sob direção editorial da Velqory.

Em resumo

Aplicações nativas e frontends no browser não conseguem manter um client secret como segredo; a segurança tem de nascer do fluxo. O cliente cria um verifier único e envia apenas o challenge, liga a resposta à transação, valida o issuer correto e troca o code pelo canal previsto. PAR reduz a superfície do pedido no browser; DPoP pode restringir tokens ao detentor de uma chave; audiência e âmbito limitam onde e para quê o token vale. A matriz abaixo transforma normas em critérios de aceitação testáveis.

  • Clientes públicos devem usar PKCE; S256 é a transformação a exigir quando suportada.
  • O implicit grant expõe tokens no endpoint de autorização e deixou de ser a opção recomendada; use response type code.
  • O resource owner password credentials grant não deve ser usado.
  • PKCE não substitui todas as verificações: redirect URI, issuer, state ou nonce, audiência e políticas de token continuam a importar.

O desenho seguro remove segredos falsos e liga cada resposta à transação certa

Um segredo empacotado numa aplicação nativa ou entregue ao browser pode ser extraído; não o use como prova de identidade do cliente público. PKCE cria prova por transação: o cliente guarda o verifier, envia o challenge e só quem apresenta o verifier correspondente consegue trocar o code.

Quando o cliente conversa com mais de um authorization server, valide o issuer da resposta ou use uma contramedida equivalente. A comparação exata do redirect URI reduz fuga de codes; state ou proteção equivalente liga a resposta à sessão; nonce protege propriedades específicas em OpenID Connect.

Fluxo de autorização com verificações explícitas

  1. 1
    Criar transação

    Gerar verifier, challenge S256, state e, quando aplicável, nonce únicos.

  2. 2
    Enviar pedido

    Usar browser externo e redirect URI pré-registado; PAR quando o perfil o exigir.

  3. 3
    Validar retorno

    Comparar state, issuer, redirect e contexto antes de aceitar o code.

  4. 4
    Trocar code

    Apresentar verifier no token endpoint correto e rejeitar reutilização ou divergência.

  5. 5
    Usar token limitado

    Validar audiência, âmbito, expiração e prova DPoP quando adotada.

Cada controlo precisa de um teste negativo, não apenas de configuração

Teste o que o sistema rejeita. Um fluxo feliz confirma interoperabilidade; não confirma que um code roubado, um issuer trocado ou um redirect quase igual falha de forma segura.

Ameaça, controlo e critério de aceitação

AmeaçaControloTeste negativoAceitação
Interceção do codePKCE S256Trocar code sem verifier ou com outroFalha sem emitir token
Mix-up de servidorValidação de issResposta com issuer diferenteCliente rejeita antes da troca
Fuga por redirectCorrespondência exataAlterar path, host ou queryPedido ou retorno rejeitado
Pedido manipuladoPARAlterar parâmetros no browserServidor usa o pedido empurrado
Replay de tokenDPoP quando aplicávelUsar token sem chave ou noutra origemRecurso rejeita a prova
Privilégio excessivoAudiência e âmbitoUsar token noutro recurso ou açãoRecurso recusa

O release gate deve provar cliente, servidor e recurso como um sistema

Automatize os testes contra a configuração real do authorization server e um resource server representativo. Valide também logs: não devem guardar code, verifier, token ou parâmetros sensíveis completos. A rotação e a revogação devem funcionar sem reinstalar toda a aplicação.

PAR e DPoP resolvem classes específicas de ameaça; não os trate como selos universais. DPoP perde valor se token e chave forem ambos roubados do mesmo contexto comprometido. A decisão deve partir do atacante real e do custo operacional do mecanismo.

  • Recusar implicit e password grant em novos clientes.
  • Usar browser externo em aplicações nativas, não um webview embebido.
  • Manter allowlist exata de redirects por ambiente.
  • Testar expiração, refresh rotation, revogação, logout e relógio desalinhado.

Consultadas na data de atualização indicada.

  1. 01RFC 9700 — Best Current Practice for OAuth 2.0 SecurityRFC Editor · SYS-RFC
  2. 02RFC 7636 — Proof Key for Code ExchangeRFC Editor · SYS-RFC
  3. 03RFC 9126 — Pushed Authorization RequestsRFC Editor · SYS-RFC
  4. 04RFC 9207 — Authorization Server Issuer IdentificationRFC Editor · SYS-RFC
  5. 05RFC 9449 — Demonstrating Proof of PossessionRFC Editor · SYS-RFC
  6. 06RFC 8252 — OAuth 2.0 for Native AppsRFC Editor · SYS-RFC