【发布时间】:2013-05-01 07:09:27
【问题描述】:
我正在尝试为托管在 example.com 的不同子域的多个 rails (v3.2) 应用程序实施单点登录解决方案
一个应用程序充当身份提供者,使用 devise 进行身份验证,并位于 users.example.com 其他应用依赖身份提供者进行身份验证,使用 devise+omniauth,域为 [app1.example.com、app2.example.com 和 example.com]。 这篇博文启发了我的大部分实现:http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/
我的工作正常,但问题仍然是会话未共享,因此在我登录身份提供程序后,我仍然需要从其他每个应用程序进行调用以进行身份验证,我需要这样做对用户来说似乎没有问题。
我尝试在 secret_token.rb 中使用相同的秘密令牌,在 session_store.rb 和 :domain => :all 中使用相同的会话密钥(也尝试将 '.example.com' 和 'example.com' 作为值)。还是没有运气。
执行上述操作后,我在 session.inspect 中看到登录身份提供程序后,会话变量“warden.user.user.key”被填充。当我立即转到 app1.example.com 上的应用程序时,session.inspect 显示相同的 session_id 和 _csrf_token 但现在缺少“warden.user.user.key”变量。
我觉得我错过了一些愚蠢的东西..有什么想法吗?
【问题讨论】:
-
你能解决这个问题吗?我正试图完全完成同样的事情。
-
user.key是否保存在 cookie 中的某个位置?也许 cookie 域未设置为 *.example.com,而是设置为 users.example.com? (编辑:按 Enter 过早提交。)是否所有单独的应用程序都按users.example.com来验证会话?或者换种说法,app1.example.com是如何验证其会话的,至少在您对系统的理解下?会话存储在哪里?共享数据库?
标签: ruby-on-rails session authentication cookies subdomain