单点登录,同一服务器上的多个域,轨道上的ruby

时间:2015-06-22 19:59:28

标签: ruby-on-rails cookies devise cors jsonp

如果我有一个包含多个域的服务器,那么在同一个域上实施单点登录解决方案的首选方法是什么。我目前正在使用设计,在不同的域上有几百万个cookie,并且卡住了。除了实施SSO之外,我还需要将各种cookie迁移到中央域。关于各种服务器,它们只有一个页面,要求我根据用户是否登录显示不同的状态。

我尝试了以下内容:

  1. CORS:选择一个域作为中央身份验证中心。从所有其他域进行跨域检查以查看用户是否已登录。对于迁移cookie,检测是​​否存在" current_user"对象,将其发送到客户端,发出CORS请求,签署用户并终止令牌。效果很好!但是......在建立2-3周之后,它在IE中完全失败了。即使是IE11,我注意到默认设置也会禁用此行为。

  2. 尝试修改

    的会话商店
     Rails.application.config.session_store
    
  3. 没有运气。

    我目前正在尝试以下内容:

    1. JSONP:我现在正试图将上述内容转换为JSONP,而我尝试了其他一些选择:

    2. 设置自定义OAUTH提供程序。像以前一样,它将成为"中心域名"如果此人已登录,则返回所请求的域,其中包含用户可以发出请求的令牌。 https://github.com/songkick/oauth2-provider

    3. 看着这个,但它看起来已经过时了? https://github.com/rubycas/rubycas-client。如果我从一开始就把它推出来,我也觉得这可能是一个解决方案,但考虑到我们进入项目的程度,我不清楚我如何转移现有的cookie 。此外,我不清楚这是否需要两个应用程序才能启动并运行(一个用于客户端,一个用于auth服务器)

    4. 当我经历这些可能性时,如果有人有任何经验做我正在做的事情,请通知我并为我节省大量工作:)

1 个答案:

答案 0 :(得分:1)

除非这是一个玩具应用程序,否则最好的办法可能是建立一个oauth提供者。

我们将Doorkeeper与Devise用于此,并且效果很好。如果您还不熟悉策略,那么花一点时间来阅读文档并在youtube上观看一两个话题是值得的,但是一旦理解了核心概念,它实际上很容易设置在这个宝石的帮助下。

http://railscasts.com/episodes/353-oauth-with-doorkeeper

上有一段快速视频