2012-04-06 17 views
5

Ok, parece que cometí un error con mi pregunta inicial. Entonces, aquí hay algunas correcciones. La respuesta todavía se aplica, porque la segunda redirección se detiene cuando hay un cambio en el protocolo a HTTPS (SSL).El navegador no sigue la redirección de una respuesta AJAX (la respuesta generada por PHP usa autenticación CAS)

En mi caso, tengo una redirección que ocurre varias veces, y el navegador no sigue la segunda redirección. Se sigue el primer redireccionamiento pero devuelve un error.

Sigo leyendo que las respuestas de JavaScript AJAX que contienen redireccionamientos se siguen automáticamente, pero parece que no en mi caso. La primera redirección es seguida automáticamente por el navegador, y la primera redirección se devuelve sin seguir la segunda redirección en el encabezado. Mi problema es que quiero que todos los redireccionamientos sean seguidos automáticamente por el navegador.

Los redireccionamientos son parte de la biblioteca phpCAS. Tengo una API escrita en PHP que verifica la autenticación del usuario, cada vez, antes de devolver los resultados.

Aquí está la secuencia. Lo principal a tener en cuenta es que el navegador devuelve la segunda respuesta, después de seguir 1 redirigir. Preferiría que fuera todo el camino y devolviera la última respuesta cuando realice una llamada AJAX al localhost/example/api.

localhost/ejemplo

  • Pide localhost/example/api usando jQuery.ajax()

Respuesta 1: localhost/ejemplo/api

  • Redirecciones a https://localhost/accounts/cas/login?service=api.example.com&gateway=true (usando SSL).

Respuesta 2:? (SSL) localhost/cuentas/cas/entrar en el servicio de puerta de enlace = api.example.com & = true

  • Cuando está presente la clave de consulta 'puerta', la El inicio de sesión simplemente redirecciona a la URL proporcionada por la clave de "servicio" con o sin un ticket (para indicar al servicio que el usuario ha iniciado sesión o no).

Respuesta 3:? Localhost/api billete = BOLETO

  • Verifica el billete y redirige de nuevo a sí mismo sin el billete.

Respuesta 4: localhost/api

  • Esta vez el cliente CAS mira a los $ _SESSION para recordar lo que era el billete, y luego procesa la solicitud de la API de regresar JSONP.

No hay ninguna razón en particular por la que estoy usando CAS sobre OpenID u OpenAuth (orization).CAS fue solo el primer módulo de autenticación en el que pude trabajar en WordPress. Estoy abierto a sugerencias en términos de usar una biblioteca de autenticación diferente, CMS, framework, etc. Aunque, mi esperanza es terminar este proyecto. Por lo tanto, cuanto menos nuevas herramientas, mejor.

+0

¿Qué sabes? He publicado esta pregunta después de buscar en StackOverflow por un tiempo. Luego, después de publicar la pregunta, hago otra búsqueda y encuentro una pregunta similar en StackOverflow. http://stackoverflow.com/questions/2961051/cas-authentication-and-redirects-with-jquery-ajax –

+0

Parece que porque la segunda respuesta usa un protocolo diferente (SSL), y el subdominio es diferente, entonces eso daría cuenta del error. Supongo que eso significaría que el navegador ESTÁ siguiendo los redireccionamientos, pero no cuando algo cambia (¿prototocolo ?, ¿subdominio? O ambos?), Y los datos no se devuelven en la respuesta (de lo contrario, tal vez se podría agregar una respuesta JSONP en ese momento). ..Tengo que intentarlo ... suspiro.) –

Respuesta

6

Como más tarde se encontró a sí mismo como agregó en sus comentarios, las solicitudes ajax están sujetas al same origin policy.

Sí, podría usar JSONP; sin embargo, si tiene la suerte de tener que admitir solo IE8 y versiones posteriores, CORS podría ser una solución mejor.

Básicamente, encabezados tales como la adición de

access-control-allow-origin: http://api.example.com 
access-control-allow-credentials: true 

a su respuesta del servidor, que podrían evitar la política de origen cruz.

También vea este jQuery ticket para que funcione un poco con jQuery.

+0

Oh genial, podría hacerlo ya que tengo acceso a todos los subdominios. ¿Funcionará eso para todos los navegadores? –

+0

@BiagioArobba no del todo, IE8 +, ópera 12+, ver: http://caniuse.com/#search=cors – Razor

Cuestiones relacionadas