2012-03-21 30 views
2

我正在整合Rails和我公司的SSO系统。我的服务器上安装并启用了SiteMinder Apache模块。Rails会话和SiteMinder/SSO

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

我的问题是这样的:成功登录后使用这种方法,在几个页面值得点击后,我突然丢失我的Rails会话,并因此我的应用程序重新认证(我回到了主页)。

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

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

即使我禁用是基于其SSO ID自动登录的用户,只是打在我的应用程序的旧登录页面(通过SSO认证后)的代码,我注意到,每隔一段时间一个出现我浏览器cookie中的新会话ID值。

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

回答

0

Rails会话(像几乎所有的Web应用程序会话)都由cookie进行跟踪。即使您使用的是AR会话存储,仍然会有一个包含sessionID的cookie,这是Web应用程序跟踪会话的唯一方式。如果浏览器丢失或删除了Cookie,则会丢失会话。

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

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

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

+0

我监视我的Rails会话cookie的内容,在Firefox,而多次击中页面。 Cookie **的内容确实发生了变化,因此此时我想知道是什么原因导致Rails决定重置Cookie。不同的起源IP?如果请求看起来“被篡改”(虽然我不认为SSO模块正在篡改我的Rails会话cookie的_contents_)? 谢谢你的建议。我已经将这个问题提交给SiteMinder人员,并且没有骰子。 – 2012-03-29 14:41:51

0

尝试增加POST,PUT,GET,DELETE,等来的SiteMinder