在Rails中跨域的单点登录的多站点应用程序?

时间:2011-12-14 12:33:47

标签: ruby-on-rails web-services architecture oauth

我必须开发跨域的单点登录多站点应用程序(例如谷歌帐户,如gmail,docs,google +等多种谷歌服务):

multi applications, multi domains, single sign on

  • 要使用儿童网站,用户必须在父网站上注册。
  • 除了用户登录,点和之外,每个站点都有自己的逻辑 发票。
  • 从子应用程序我必须能够登录全球用户 帐户,支出用户积分并为某项服务生成发票。
  • 注册表格,发票清单和管理点的面板 仅可从父站点/应用程序获得。

在Rails 3.1上实现此功能的最佳策略是什么?可扩展性,性能和安全性非常重要。

  • 单轨还是多轨应用?
  • 单个或多个数据库?
  • 主要应用程序中的全局服务或作为单独的应用程序/引擎?
  • 如何实施单点登录?数据库中的单个会话ID或类似facebook oauth?
  • 如何根据子网站的请求实施支出点并生成发票?

2 个答案:

答案 0 :(得分:5)

你应该能够使用OmniAuth和多个(和独立的)Rails应用程序来实现这一点。这些将是有趣的:

关于此主题的博客文章:http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

答案 1 :(得分:-1)

因此,假设您在主应用程序中创建模型User并进行迁移。然后,您需要做的是从其他应用程序访问此数据库。那没问题。首先,您需要将主应用程序的数据库连接定义添加到子应用程序的config/database.yml,如下所示:

parent_connection:
  adapter: your_adapter_here
  host: your_host_here
  username: username
  password: password
  database: main_application_production

然后使用scaffolder或sth创建一个名为User的模型,但 not 。像这样。只需手动创建文件:

class User < ActiveRecord::Base
     establish_connection :parent_connection # This uses the specified connection
end

在默认情况下,所选连接是与环境名称匹配的连接。您只需指定变体。现在,您可以像在主应用程序中一样访问User类。

相关问题