我正在尝试为托管在 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”变量。
我觉得我错过了一些愚蠢的东西。有什么想法吗?