浏览器不遵循AJAX响应的重定向(PHP生成的响应使用CAS身份验证)

Bia*_*bba 5 php ajax jquery cas

好吧,看起来我的初始问题出错了.所以,这里有一些更正.答案仍然适用,因为当协议更改为HTTPS(SSL)时,第二个重定向将停止.

在我的情况下,我有多次重定向,浏览器不遵循第二次重定向.遵循第一个重定向但返回错误.

我一直在阅读包含重定向的JavaScript AJAX响应会自动跟踪,但看起来不像我的情况.浏览器会自动跟随第一个重定向,并返回第一个重定向,而不会跟随标题中的第二个重定向.我的问题是我希望浏览器自动遵循所有重定向.

重定向是phpCAS库的一部分.我有一个用PHP编写的API,每次都会在返回结果之前检查用户身份验证.

这是序列.需要注意的主要事情是浏览器在执行1次重定向后返回第二个响应.我更喜欢它一路走来,并在我进行AJAX调用时返回最后一个响应localhost/example/api.

本地主机/示例

  • localhost/example/api使用jQuery.ajax()调用

响应1:localhost/example/api

  • 重定向到https://localhost/accounts/cas/login?service=api.example.com&gateway=true(使用SSL).

响应2:(SSL)localhost/accounts/cas/login?service = api.example.com&gateway = true

  • 当存在查询密钥"gateway"时,登录简单地重定向回到"服务"密钥提供的URL,带有或不带有票证(用于表示用户是否已登录的服务).

响应3:localhost/api?ticket = TICKET

  • 验证票证并在没有票证的情况下重定向回自身.

响应4:localhost/api

  • 这次CAS客户端查看$ _SESSION以记住故障单,然后处理返回JSONP的API请求.

没有特别的原因我使用CAS而不是OpenID或OpenAuth(orization).CAS只是我能够在WordPress中工作的第一个身份验证模块.我对使用不同的身份验证库,CMS,框架等方面的建议持开放态度.虽然,我希望能够完成这个项目.因此,重新加工越少越好.

Raz*_*zor 6

正如您后来发现自己在评论中添加的那样,ajax请求受到相同的原始策略的约束.

是的,您可以使用JSONP - 但是,如果您有幸只支持IE8及更高版本,CORS可能是更好的解决方案.

基本上,添加标题如

access-control-allow-origin: http://api.example.com
access-control-allow-credentials: true
Run Code Online (Sandbox Code Playgroud)

对于您的服务器答案,您可以解决跨源策略.

另请参阅此jQuery票证以使其与jQuery一起使用.