1

我们的 Web 服务器使用 CAS 进行单点登录。CAS 服务器在https://portal.ourdomain.com上运行 JASIG CAS 服务器,而 Web 服务器在http://service.ourdomain.com上运行 Rails 。

Rails 服务器将其会话超时设置得相当低,作为单一注销备份措施和其他原因。因此,偶尔,用户会被重定向到 portal.ourdomain.com 以进行重新身份验证。通常这是无缝的,因为 portal.ourdomain.com 会立即使用更新的票证 cookie 将它们重定向回 service.ourdomain.com,除非 CAS 会话已过期。

但是,这不适用于 AJAX。Web 浏览器不遵循 XHR 请求的重定向,即使域相同。

一个明显的解决方案是提供来自https://ourdomain.com的所有内容,并停止子域的废话。这是一项广泛的操作,需要通过 https 提供所有服务。

另一种解决方案是定期 ping 服务器,使其永远不会超时。除了增加服务器上的负载之外,拥有永不超时的页面首先会破坏超时的目的。

这导致了第三个糟糕的解决方案:只需删除超时。

如何克服对受 CAS 保护的资源的 Ajax 调用的跨域问题?是一个没有答案的类似问题,但这个问题似乎更广泛,所以我希望我们的问题有答案。

有没有人对这个问题有任何不糟糕的解决方案?

4

1 回答 1

0

在进行重新验证时,您只能将 ajax xhr 请求包装起来,以便浏览器能够理解重定向。那将需要更改 cas 代理的代码。这种“必须检查和扩展(在最坏的情况下)每种 ajax web 框架的解决方法。我们为 jquery 做了它,很高兴它是 rails3 的 ajax 基础。

于 2012-04-14T20:30:28.933 回答