2012-04-06 22 views
5

好吧,它看起来像我在我的最初问题上犯了一个错误。所以,这里有一些更正。答案仍然适用,因为当协议更改为HTTPS(SSL)时,第二次重定向会停止。浏览器不遵循来自AJAX响应的重定向(PHP生成的响应使用CAS认证)

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

我一直在阅读包含重定向的JavaScript AJAX响应自动跟随,但它看起来不像我的情况。浏览器自动跟随第一个重定向,并且第一个重定向被返回,而不在第一个重定向之后。我的问题是,我希望浏览器自动跟踪所有重定向。

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

这是序列。最重要的是要注意的是浏览器返回第二个响应后,遵循1重定向。我宁愿它一路走完,并返回最后的响应,当我拨打localhost/example/api的AJAX电话。

本地主机/例如使用jQuery.ajax

  • 呼叫localhost/example/api()

响应1:本地主机/示例/ API

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

响应2:(SSL)本地主机/帐户/ CAS /登录服务= api.example.com &网关=真

  • 当查询键 '网关' 存在,则登录只需重定向到“服务”密钥提供的URL,无论是否有票证(以表示服务用户已登录或未登录)。

响应3:本地主机/ API票= TICKET

  • 验证票和重定向回本身没有票。

响应4:本地主机/ API

  • 这次CAS客户端着眼于$ _SESSION记住什么票了,然后处理API请求返回JSONP。

没有什么特别的原因我在OpenID或OpenAuth(orization)上使用CAS。CAS只是我能够在WordPress中工作的第一个认证模块。我接受使用不同身份验证库,CMS,框架等方面的建议。尽管我希望完成此项目。所以重新加工越少越好。

+0

什么你知道,我一会儿在计算器上进行搜索后发布了这个问题。然后,发布问题后,我做了另一个搜索,并在StackOverflow上找到类似的问题。 http://stackoverflow.com/questions/2961051/cas-authentication-and-redirects-with-jquery-ajax – 2012-04-06 18:36:13

+0

它看起来像因为第二个响应使用不同的协议(SSL),并且子域是不同的,那么会解释错误。我想这意味着浏览器是在重定向之后进行的,而不是在有些事情发生变化时(不管是prototocol还是subodmain?或者两者都有),并且数据不会在响应中返回(否则,可能会在此时添加JSONP响应。 ..我必须尝试一下......叹息。) – 2012-04-06 18:40:33

回答

6

随着您在发表自己的评论时发现自己,ajax请求受制于same origin policy

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

基本上,添加标题如

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

到你的服务器的回答,您可以解决跨起源策略。

也看到这个jQuery ticket使它有点用jQuery工作。

+0

哦,很酷,我可以这样做,因为我可以访问所有的子域名。这将适用于所有浏览器吗? – 2012-04-06 19:10:28

+0

@BiagioArobba不完全,IE8 +,歌剧12+,请参阅:http://caniuse.com/#search=cors – Razor 2012-04-06 19:13:31