跨多个域的SSL和身份验证

时间:2010-02-03 11:47:15

标签: ruby-on-rails authentication ssl ssl-certificate

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

joebloggs.myapp.com

所以至少我需要一个通配符SSL证书来处理用户传递敏感数据的时间(身份验证,支付等)。

此外,我们允许想要将自己的域名映射到其帐户的用户,例如:

www.joebloggs.com

这突然间引起了巨大的麻烦。我假设没有SSL产品可用于此目的(即,可能在无限域上使用)?

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

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

所以真的,我只是想知道是否有人曾经遇到过这样的情况?如果是这样,你采取了什么方法来解决这里的几个问题?

1 个答案:

答案 0 :(得分:3)

这可能不是您问题的答案。但你的问题已经过了6个小时而没有答案,所以我想我会提出几个不同的想法。也许它会激发其他读者心中的创造力。 :)

这些按照我个人认为的解决方案的顺序排列。

即使用户拥有自己的

,也始终拥有子域名

根据您的示例,您可以在www.joebloggs.com上专门提供静态页面,其中包含链接到joebloggs.myapp.com的登录链接。如果用户已经登录,则可以跳过实际的登录步骤,因为cookie随后可用。

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

提供静态页面,并使用跨站点AJAX

有一个名为Cross-Origin Resource Sharing的相对较新的草稿标准,它允许跨域的AJAX请求。 Firefox从版本3.5开始支持它,并且在Mozilla Developer Center上有一些更具可读性(比W3规范)的实例,这些实例在实践中有效。

除了Firefox 3.5之外,这在IE 8中也得到了支持。它在较新版本的Chrome和Safari中,但我无法确定哪个版本。 (Webkit变更集#41046。)我找不到任何关于Opera的确定性。

另请注意,非GET请求会产生“飞行前”请求的额外开销。

使用iframe

提供动态部分

可以使用某些CSS很好地隐藏iframe,并使其无缝地显示在页面上。您可以使用指向myapp.com的iframe来提供页面的动态部分。例如,如果动态部分只是页面标题的一部分,并且包含一些帐户信息和链接,那么这将非常有效。

如果您打算根据用户的权限隐藏内容,则可以将其作为iframe服务于页面的整个内容区域。

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

经典隐藏式隐形框架技巧

过去曾在Geocities等平台上托管的网站曾经有过那些“隐藏”地址栏中漂亮网址背后网站的免费.tk网域。诀窍在于.tk域提供了一个具有不可见框架的框架集,另一个框架覆盖了所有窗口,这将为Geocities网站提供服务。

这当然是丑陋,但我不得不提到它。这意味着地址栏不会使用您网站上的链接导航进行更新,并且始终会显示根网址。它还忽略了拥有单独域的许多可能的优点。它甚至可能与之前的iframe技巧有相同的缺点。

相关问题