【问题标题】:How can I share user sessions across multiple domains using Rails?如何使用 Rails 跨多个域共享用户会话?
【发布时间】:2010-09-21 10:09:26
【问题描述】:

是否有人知道任何 Gems、教程或解决方案,使用户能够在一个域中登录网站并在同一会话中自动获得对其他合作伙伴域的访问权限?

我有两个 Rails 应用程序正在运行,我们称它们为 App-A 和 App-B。 App-A 有一个与之关联的数据库,为 App-A.com 上的注册和登录提供动力。我现在想为所有拥有 App-A.com 帐户的用户授予对 App-B.com 的访问权限,而无需让他们重新注册或单独手动登录到 App-B.com。

提前感谢您的帮助! --马克

【问题讨论】:

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


    【解决方案1】:

    如果您想为您的应用程序创建单点登录解决方案,那么我建议您查看RubyCAS 解决方案。它还可以用于为其他非 Rails 应用程序提供单点登录,并且您可以将身份验证与 LDAP 或其他身份验证提供程序集成。

    【讨论】:

      【解决方案2】:

      您可以在两个应用程序中设置相同的 session_key。在 appA environment.rb 中更改 session_key,像这样

      Rails::Initializer.run do |config|
         ...  
       config.action_controller.session = {
         :session_key => '_portal_session',
         :secret      => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415'
        }
        ...
      end
      

      在 AppB 中执行相同的操作。 (记得使用相同的秘密)

      现在您已共享会话。假设您使用 restfull_authentication,它设置了一个名为 user_id 的会话变量。当您在 appA 中进行身份验证时,它会在会话中设置 user_id。现在,在 appB 中,您只需验证会话中是否存在 user_id。

      这是整体架构,您可以使用此想法进行更多详细说明。

      【讨论】:

      • 据我所知,这只有在两个应用程序在同一个域中时才有效?
      • 没错,这个解决方案不能跨多个域。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      相关资源
      最近更新 更多