跨多个域的SSL和身份验证

aar*_*ell 7 authentication ssl ruby-on-rails ssl-certificate

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

joebloggs.myapp.com
Run Code Online (Sandbox Code Playgroud)

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

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

www.joebloggs.com
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Sté*_*hen 3

这可能无法解决您的问题。但你的问题已经过去 6 个小时了,没有得到答复,所以我想我应该提出一些替代想法。也许它会激发其他读者的一些创造力。:)

这些是按照我个人认为它们的解决方案的简洁程度排序的。

始终有一个子域,即使用户有他/她自己的子域

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

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

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

有一个相对较新的标准草案,称为跨源资源共享,它允许跨域的 AJAX 请求。Firefox 从 3.5 版开始支持它,并且在Mozilla 开发人员中心有一些更具可读性(比 W3 规范)的示例来说明它在实践中如何工作。

除了 Firefox 3.5 之外,IE 8 似乎也支持此功能。较新版本的 Chrome 和 Safari 也支持此功能,但我无法确定是从哪个版本开始的。(Webkit 变更集#41046。)我找不到任何关于 Opera 的明确信息。

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

使用 iframe 提供动态部分

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

如果您计划根据用户的权限隐藏内容,则可以将页面的整个内容区域作为 iframe 提供服务。

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

经典的隐藏在隐形框架后面的技巧

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

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