【发布时间】:2013-06-20 00:10:04
【问题描述】:
我正在将 Rails 与我公司的 SSO 系统集成。我在我的服务器上安装并启用了 SiteMinder Apache 模块。
Rails 应用程序检查 before_filter 中的请求对象以确定用户是否已经通过 SSO 的身份验证。找到所需变量后,我的应用程序会将 SSO 返回的用户 ID 与自身内部的用户帐户进行匹配,并验证该用户(使用 ActiveRecord 会话存储进行静态验证)。
我的问题是这样的:使用此方法成功登录后,在点击几页之后,我突然丢失我的 Rails 会话,结果我的应用程序重新验证了我的身份(我返回首页)。
这不是 CSRF 保护的结果,因为它:
- 在我的应用程序的测试和生产环境中都发生(默认情况下在测试环境中关闭),并且
- 无论请求类型如何,看似随机发生:AJAX、GET 和 POST 请求都导致了这种行为。
即使我禁用根据用户的 SSO ID 自动登录的代码,并且只是在我的应用程序上点击旧的登录页面(在使用 SSO 进行身份验证之后),我注意到每一个我的浏览器 cookie 中经常会出现一个新的会话 id 值。
因此,当我打开我的 Apache SSO 模块时,会话将被重置。否则,一切都很好,花花公子。什么给了?
【问题讨论】:
标签: ruby-on-rails ruby session single-sign-on siteminder