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.
Veja o guia pilar de depuração de API para o fluxo local completo. Se a estrutura da query estiver confusa, leia analise e reconstrua query strings antes de mudar a codificação.
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/callbackhttps://app.example.com/callback/https://app.example.com/callback?source=loginhttps%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:
%253Aonde você esperava%3A.%252Fonde 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
stateenoncesobrevivem ao round trip.
OAuth pode ser complexo, mas muitos bugs de redirect ficam simples quando você separa cada camada da URL.
Volte ao fluxo de depuração de API para a cadeia completa de ferramentas.