Ruby on rails 跨多个域的SSL和身份验证

Ruby on rails 跨多个域的SSL和身份验证,ruby-on-rails,authentication,ssl,ssl-certificate,Ruby On Rails,Authentication,Ssl,Ssl Certificate,我正在使用Ruby on Rails构建一个应用程序,允许用户注册并创建自己的子域: joebloggs.myapp.com 因此,至少我需要一个通配符SSL证书来处理用户传递敏感数据(身份验证、支付等)的情况 此外,我们允许希望将自己的域映射到其帐户的用户,如: www.joebloggs.com 这会突然引起剧烈的头痛。我假设没有SSL产品可用于此目的(即,可能用于无限域) 该应用程序本质上是一个CMS,因此它有一个面向公众的网站和一个管理后端。面向公众的网站端必须具备映射到用户域的功能

我正在使用Ruby on Rails构建一个应用程序,允许用户注册并创建自己的子域:

joebloggs.myapp.com
因此,至少我需要一个通配符SSL证书来处理用户传递敏感数据(身份验证、支付等)的情况

此外,我们允许希望将自己的域映射到其帐户的用户,如:

www.joebloggs.com
这会突然引起剧烈的头痛。我假设没有SSL产品可用于此目的(即,可能用于无限域)

该应用程序本质上是一个CMS,因此它有一个面向公众的网站和一个管理后端。面向公众的网站端必须具备映射到用户域的功能。然而,我不太关心管理领域,我很乐意强迫用户登录并通过他们的子域管理他们的站点

然而,虽然对于大多数网站来说,用户是否登录并不重要,但我确实希望能够知道用户是否登录,这样我就可以为登录的用户提供稍微不同的内容。我假设这会给我带来问题,因为cookie不能在多个域上使用(或者可以吗?)。我正在使用Authlogic进行身份验证


所以说真的,我只是想知道以前有没有人遇到过这样的情况?如果是这样的话,您采取了什么方法来回避这里的几个问题?

这可能不是您问题的答案。但是你的问题已经6个小时没有答案了,所以我想我应该提出一些其他的想法。也许这会激发其他读者的创造力

这些都是按照我个人认为的解决方案的整洁程度排序的

始终拥有子域,即使用户拥有自己的子域 按照您的示例,您可以在
www.joebloggs.com
上专门提供静态页面,并提供链接到
joebloggs.myapp.com
的登录链接。如果用户已登录,则可以跳过实际的登录步骤,因为此时cookie可用

这将要求所有用户都有一个子域,即使他们指定了自己的域

提供静态页面,并使用跨站点AJAX 有一个相对较新的草案标准称为,它允许跨域的AJAX请求。Firefox从3.5版开始就支持它,并且有一些更具可读性(比W3规范更具可读性)的示例,说明了它在实践中是如何工作的

除了Firefox3.5,IE8似乎也支持这一点。它在较新版本的Chrome和Safari中,但我无法确定是哪个版本。(Webkit变更集#41046)我找不到任何关于Opera的明确信息

还要注意,非GET请求具有“飞行前”请求的额外开销

使用iframe为动态零件提供服务 iFrame可以通过一些CSS很好地隐藏,并无缝地显示在页面上。您可以使用指向
myapp.com
的iFrame提供页面的动态部分。例如,如果动态部分只是带有一些帐户信息和链接的页面标题的一部分,那么这将相当好地工作

如果您计划基于用户的权限隐藏内容,那么您可以将其作为iframe服务于页面的整个内容区域

缺点是,一些浏览器可能会抱怨混合了普通内容和安全内容

经典的隐藏在隐形框架后的技巧 很多以前托管在Geocities等平台上的站点过去都有免费的
.tk
域,这些域将站点“隐藏”在地址栏中漂亮的URL后面。诀窍在于
.tk
域提供了一个带有不可见框架的框架集,另一个框架覆盖了整个窗口,这将服务于Geocities站点


这当然是丑陋的,但我不得不提一下。这意味着地址栏将不会随着站点上的链接导航而更新,并且将始终显示根URL。它还忽略了拥有一个独立域的许多可能的优势。而且它甚至可能与iFrame的上一个技巧有相同的缺点。

用户如何从自己的域访问您的应用程序?用户有责任更新其域的DNS A记录,以指向我们将提供给他们的IP地址。在应用程序方面,当有人查看www.randomdomain.com时,应用程序会尝试在数据库中查找该域并将其与帐户关联。谢谢您的回答。在与我的客户讨论了这一点之后,我认为我们将实施一个解决方案,在这个解决方案中,内容的网站端将在映射的完整域上提供服务,而登录和管理区域将在子域上提供服务。对于网站的动态部分,登录的用户应该会看到不同的内容,我们将用iFrame对其进行修改,看看会发生什么。谢谢你的建议。