如果我有一台带有多个域的服务器,那么在同一域上实现单一登录解决方案的首选方法是什么。我目前正在使用design,在不同的域上有几百万个cookie,并且被卡住了。除了实现SSO之外,我还需要将各种cookie迁移到一个中心域。关于各种服务器,它们只有一个页面,需要我根据用户是否登录来显示不同的状态
我尝试过以下几种:
-
CORS:选择一个域作为中心身份验证中心。从所有其他域进行跨域检查,查看用户是否已登录。对于迁移cookie,请检测是否有"current_user"对象,将其发送到客户端,发出CORS请求,让用户登录并终止令牌。效果很好!但是。。。在构建了2-3周后,它在IE中完全失败。即使是IE11,我也注意到默认设置是禁用这种行为。
-
尝试修改的会话存储
Rails.application.config.session_store
运气不佳。
我目前正在试验以下内容:
-
JSONP:我现在有人试图将上面的转换为JSONP,同时我尝试其他选项:
-
设置自定义OAUTH提供程序。和以前一样,它将是"中心域",如果用户登录,则会返回到请求的域,并带有令牌,用户可以从中提出请求。https://github.com/songkick/oauth2-provider
-
看看这个,但它看起来过时了?https://github.com/rubycas/rubycas-client.我也有一种感觉,如果我从一开始就推出它,这可能是一个解决方案,但考虑到我们对该项目的投入,我不清楚我将如何转移现有的cookie。此外,还不清楚这是否需要两个应用程序才能启动和运行(一个用于客户端,一个用于身份验证服务器)
在我经历这些可能性的过程中,如果有人对我正在做的事情有任何经验,请务必通知我,并为我节省大量工作:)
除非这是一个玩具应用程序,否则最好的方法可能是设置oauth提供程序。
我们使用Doorkeeper和Devise,效果很好。如果你还不熟悉该策略,那么留出一点时间阅读文档并在youtube上观看一两场演讲是值得的,但一旦你理解了核心概念,借助这个宝石设置起来其实很简单。
上有一个快速视频http://railscasts.com/episodes/353-oauth-with-doorkeeper