【问题标题】:Rails Sessions and SiteMinder/SSORails 会话和 SiteMinder/SSO
【发布时间】:2013-06-20 00:10:04
【问题描述】:

我正在将 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 模块时,会话将被重置。否则,一切都很好,花花公子。什么给了?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我在 Firefox 中监视我的 Rails 会话 cookie 的内容,同时反复点击页面。 cookie did 的内容发生了变化,所以此时我想知道是什么导致 Rails 决定重置 cookie。不同的原创IP?如果请求看起来“被篡改”(尽管我不认为 SSO 模块篡改了我的 Rails 会话 cookie 的 contents)?谢谢你的建议。我已经向 SiteMinder 人员提出了这个问题,而且,没有骰子。
    【解决方案2】:

    尝试在站点管理器中添加 POST、PUT、GET、DELETE 等

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2019-07-29
      • 1970-01-01
      相关资源
      最近更新 更多