Rails会话和SiteMinder / SSO

时间:2012-03-21 19:10:17

标签: ruby-on-rails ruby session single-sign-on siteminder

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

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

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

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

  1. 在我的应用程序的测试和生产环境中发生(默认情况下在测试环境中关闭),
  2. 无论请求类型如何,似乎都是随机的:AJAX,GET和POST请求都导致了这种行为。
  3. 即使我禁用根据他们的SSO ID自动登录用户的代码,只需点击我的应用程序上的旧登录页面(在使用SSO进行身份验证后),我注意到每一个通常会在浏览器cookie中显示新的会话ID值。

    因此,当我打开Apache SSO模块时,会话正在重置。否则,一切都很好,花花公子。是什么给了什么?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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