如何通过多个应用程序维护用户身份验证\会话?

时间:2011-02-21 17:18:19

标签: ruby-on-rails ruby ruby-on-rails-3 session authentication

我正在使用Ruby on Rails 3,我有3个Web应用程序:

<site_name>.com
users.<site_name>.com
resources.<site_name>.com

注意:此时我在同一台服务器上有应用程序,但将来我可以选择在分离的Web服务器上部署这些应用程序。所以,我不想使用通用解决方案:

config.session_store :cookie_store, :key => '<whatever key>', :domain => :all

在你的答案中考虑这一点。


我想通过所有这些应用程序处理用户身份验证\会话,以便用户必须只对自己进行一次身份验证。也就是说,我想在{{1}上签名用户然后在浏览其他应用程序时保持其会话。

所以,问题是:

  1. 您对实施这些功能有何建议?编写自己的代码或使用gem(s)\ plugin(s)吗?如果是后者,你建议使用哪些gem(s)\ plugin(s)组合?

  2. 我听说过OAuth协议:在我的情况下(如果此时我只需要通过我的应用程序授权用户)是否正确使用它?如果是这样,我可以用什么gem(s)\ plugin来实现呢?

2 个答案:

答案 0 :(得分:1)

如果您总是要将这些服务器放在*。&lt; site_name&gt; .com上,那么您可以使用写入&lt; site_name&gt; .com范围的cookie来跟踪和验证此用户。显然你必须要小心这一点,并确保a)通过HTTPS(安全cookie)传输cookie,以及b)每个服务器通过某种Web服务验证cookie。

我建议调查Warden和warden_rails宝石。除了这个基本良好记录的身份验证基础之外,您还可以编写“策略”来使用cookie验证用户并从中央数据源读取会话信息。

答案 1 :(得分:0)

如果它们都在同一个域下运行,最简单的方法是确保您的cookie对所有子域都有效。在你的production.rb中:

config.session_store :cookie_store, :key => '<whatever key>', :domain => :all

:domain => :all会导致您的Cookie在所有子域中有效。只需确保所有应用中的密钥和会话密钥令牌都相同。