Bugs comuns de codificação de URL em redirects OAuth

Problemas de redirect OAuth costumam vir de double encoding, falta de codificação e confusão entre query strings e URLs aninhadas.

Problemas de redirect OAuth muitas vezes são bugs de codificação de URL com etiqueta de autenticação. O provedor diz que redirect_uri não confere, o callback perde um parâmetro ou uma URL de retorno aninhada quebra após o login.

A maioria vem de um destes três lugares: codificação ausente, double encoding ou codificação do limite errado.

O redirect URI deve coincidir exatamente

Provedores de identidade costumam comparar redirect URIs de forma estrita. Estes podem ser valores diferentes:

  • https://app.example.com/callback
  • https://app.example.com/callback/
  • https://app.example.com/callback?source=login
  • https%3A%2F%2Fapp.example.com%2Fcallback

O valor registrado, a requisição de autorização e a rota de callback da aplicação precisam concordar.

URLs aninhadas exigem cuidado

Padrão comum: URL de login com destino de retorno:

/login?return_to=/billing?tab=invoices&page=2

Os ? e & aninhados pertencem à URL de retorno, não à query externa de login. Sem codificação, o parser externo divide errado.

A forma mais segura codifica o valor aninhado:

/login?return_to=%2Fbilling%3Ftab%3Dinvoices%26page%3D2

Use o Codificador / Decodificador de URL para inspecionar cada limite separadamente.

Cuidado com double encoding

Double encoding ocorre quando o valor é codificado no seu código e de novo por framework ou cliente HTTP.

Sinais:

  • %253A onde você esperava %3A.
  • %252F onde você esperava %2F.
  • Provedor mostrando redirect URI que ainda tem % após decodificar uma vez.

Decodifique uma camada por vez. Se só fica legível após duas decodificações, ache onde a segunda codificação acontece.

Espaço e sinal de mais nem sempre são iguais

Em application/x-www-form-urlencoded, + muitas vezes representa espaço. Na codificação percentual geral de URL, espaços são %20 e + é literal.

Parâmetros OAuth passam por form posts, URLs, logs e helpers de SDK. Seja explícito sobre qual modo de codificação está em uso.

Checklist de depuração

Quando o callback falha:

  • Compare redirect URI registrado com o valor da requisição.
  • Decodifique o valor da requisição exatamente uma vez.
  • Verifique se URLs aninhadas estão codificadas como um único valor de parâmetro.
  • Procure %25 — sinal de que % foi codificado.
  • Confirme que state e nonce sobrevivem ao round trip.

OAuth pode ser complexo, mas muitos bugs de redirect ficam simples quando você separa cada camada da URL.

Ferramentas relacionadas

Use as ferramentas deste artigo

Codificador / Decodificador URLurl / uri / encodeDecodificador JWTjwt / decoder / json web tokenFormatador JSONjson / formatter / validator

Aprenda o formato

Curso de codificação de URLEntenda codificação percentual, query strings e a diferença entre encodeURI e encodeURIComponent.Curso de JWTAprenda JSON Web Tokens: estrutura, claims, limites de verificação e depuração prática.

Voltar aos artigos