5

好的,看来我在最初的问题上犯了一个错误。所以,这里有一些更正。答案仍然适用,因为当协议更改为 HTTPS (SSL) 时会停止第二次重定向。

就我而言,我多次发生重定向,并且浏览器不遵循第二次重定向。遵循第一个重定向但返回错误。

我一直在阅读包含重定向的 JavaScript AJAX 响应会被自动跟踪,但在我的情况下似乎不是。浏览器自动跟随第一个重定向,返回第一个重定向而不跟随标头中的第二个重定向。我的问题是我希望浏览器自动跟踪所有重定向。

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

这是顺序。需要注意的主要是浏览器在执行 1 次重定向之后返回第二个响应。当我对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' 存在时,登录会简单地重定向回由 'service' 键提供的 URL,无论是否有票证(向服务发出信号,告知用户是否已登录)。

响应 3:localhost/api?ticket=TICKET

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

响应 4:本地主机/api

  • 这次 CAS 客户端查看 $_SESSION 以记住票据是什么,然后处理返回 JSONP 的 API 请求。

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

4

1 回答 1

5

正如您后来发现自己在评论中添加的那样,ajax 请求受制于同源策略

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

基本上,添加标题,如

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

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

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

于 2012-04-06T19:03:14.457 回答