2

我正在将 Rails 与我公司的 SSO 系统集成。我在我的服务器上安装并启用了 SiteMinder Apache 模块。

Rails 应用程序检查 before_filter 中的请求对象以确定用户是否已经通过 SSO 认证。在找到所需的变量后,我的应用程序会将 SSO 返回的用户 ID 与自身内部的用户帐户进行匹配,并对该用户进行身份验证(使用 ActiveRecord 会话存储进行静态身份验证)。

我的问题是:使用此方法成功登录后,在点击几页后,我突然失去了我的 Rails 会话,结果被我的应用程序重新验证(我回到主页)。

这不是 CSRF 保护的结果,因为它:

  1. 在我的应用程序的测试和生产环境中都发生(默认情况下它在测试环境中关闭),并且
  2. 无论请求类型如何,似乎都是随机发生的:AJAX、GET 和 POST 请求都导致了这种行为。

即使我禁用了根据用户的 SSO ID 自动登录用户的代码,并且只是点击了我的应用程序上的旧登录页面(在使用 SSO 进行身份验证之后),我注意到我的浏览器 cookie 中每隔一段时间就会出现一个新的会话 id 值出现。

因此,当我打开 Apache SSO 模块时,会话将被重置。否则,一切都很好。是什么赋予了?

4

2 回答 2

0

Rails 会话(就像几乎任何 Web 应用程序会话一样)由 cookie 跟踪。即使您使用的是 AR 会话存储,仍然有一个带有 sessionID 的 cookie,这是 Web 应用程序可以跟踪会话的唯一方式。如果浏览器丢失或删除它的 cookie,那么它将丢失会话。

或者,如果您有一些调用 #reset_session 控制器方法的 Rails 代码。或者,您可以自己实际修改 #cookies 哈希以删除会话标识 cookie(但您永远不想这样做)。

根据您提供的信息,我无法说出导致会话丢失的原因。但这些是开始寻找的地方。如果您可以重现该问题,请在会话“丢失”之前和之后查看您的 cookie。您可以使用自己的界面在浏览器中查看 cookie,也可以在 rails 应用程序中(使用调试器,甚至输出到页面进行调试)从控制器或视图中的 #cookies 方法返回的哈希中查看。他们何时/如何/为什么改变?

听起来您怀疑 SSO 模块正在删除与 rails 相关的 cookie。这可能是 SiteMinder 支持的问题,而不是 Rails 问题。

于 2012-03-22T05:19:17.507 回答
0

尝试将 POST、PUT、GET、DELETE 等添加到 siteminder

于 2013-06-19T16:10:04.203 回答