Errores comunes de URL encoding en redirecciones OAuth
Los bugs de redirección OAuth suelen venir de doble codificación, codificación ausente y confundir query strings con URLs anidadas.
Los problemas de redirección OAuth suelen ser problemas de URL encoding con distintivo de autenticación. El proveedor de identidad dice que el redirect_uri no coincide, el callback pierde un parámetro o una URL de retorno anidada se rompe tras el login.
La mayoría de estos bugs vienen de uno de tres sitios: codificación ausente, doble codificación o codificar el límite equivocado.
Consulta la guía principal de depuración de APIs para el flujo local completo. Cuando la estructura de la query no esté clara, lee analizar y reconstruir query strings de URL antes de cambiar la codificación.
El redirect URI debe coincidir exactamente
Los proveedores de identidad suelen comparar redirect URIs de forma estricta. Estos pueden ser valores distintos:
https://app.example.com/callbackhttps://app.example.com/callback/https://app.example.com/callback?source=loginhttps%3A%2F%2Fapp.example.com%2Fcallback
El valor registrado, la petición de autorización y la ruta de callback de la aplicación deben coincidir.
Las URLs anidadas requieren cuidado especial
Un patrón habitual es una URL de login con un destino de retorno:
/login?return_to=/billing?tab=invoices&page=2
Los caracteres ? y & anidados pertenecen a la URL de retorno, no a la query externa del login. Sin codificación, el parser externo los dividirá incorrectamente.
La forma más segura codifica el valor anidado:
/login?return_to=%2Fbilling%3Ftab%3Dinvoices%26page%3D2
Usa Codificador y decodificador URL para inspeccionar cada límite por separado. Cuando la URL de autorización es una cadena larga, divide primero claves y valores con Parser de URL / Query Builder, y luego codifica o decodifica un componente a la vez.
Cuidado con la doble codificación
La doble codificación ocurre cuando tu código codifica un valor una vez y un framework o cliente HTTP lo codifica otra.
Señales incluyen:
%253Adonde esperabas%3A.%252Fdonde esperabas%2F.- Un proveedor que muestra un redirect URI que aún contiene signos de porcentaje tras decodificar una vez.
Decodifica una capa a la vez. Si el valor solo se vuelve legible tras dos decodificaciones, localiza dónde ocurre la segunda codificación.
Espacios y signos más no siempre son lo mismo
En application/x-www-form-urlencoded, + suele representar un espacio. En el percent encoding general de URL, los espacios son %20 y los signos más son signos más literales.
Los parámetros OAuth a menudo pasan por form posts, URLs, logs y helpers de SDK. Sé explícito sobre qué modo de codificación se está usando.
Checklist de depuración
Cuando falle el callback:
- Compara el redirect URI registrado con el valor de la petición.
- Decodifica el valor de la petición exactamente una vez.
- Comprueba si las URLs anidadas están codificadas como un único valor de parámetro.
- Busca
%25, señal de que el propio%fue codificado. - Confirma que los valores state y nonce sobreviven al round trip.
OAuth puede ser complejo, pero muchos bugs de redirección se vuelven simples una vez separas cada capa de URL.
Vuelve al resumen del flujo de depuración de APIs cuando necesites la cadena completa de herramientas.