【问题标题】:cross domain cookies Rails 3跨域cookie Rails 3
【发布时间】:2012-06-14 01:59:37
【问题描述】:

我想知道是否可以在另一个域而不是我当前的应用程序域名下获取 cookie?

我正在构建一个访问另一个网站的 api 的应用程序。如果用户已经从其他站点登录,我的浏览器将在该域名下创建一个 cookie。例如,用户在 www.example.com 下登录,我的浏览器会存储一个 cookie: cookies['token'] 在 www.example.com 域下。当用户访问我的网站 www.mywebsite.com 时,如何在我的 rails 服务器中获取 www.example.com 下的 cookie?

非常感谢任何帮助。

【问题讨论】:

  • 基本上:你不能。具有域的 cookie 的要点是浏览器只发送属于当前域的 cookie。换句话说,如果您确实找到了一种方法来读取不属于您的域的 cookie,那么您就发现了一个安全漏洞。
  • 是的,我已经用谷歌搜索了好几天,我发现很多答案和你一模一样。非常感谢您的回答。

标签: ruby-on-rails ruby-on-rails-3 cookies cross-domain


【解决方案1】:

这可以做到,但需要客户端、您的网站和您的其他网站一起工作。您有一个知道如何向站点 A 进行身份验证的客户端。它希望将站点 B 视为它知道如何针对站点 A 进行身份验证的用户。完成此操作的基本方法是让客户端联系站点 A,对其自身进行身份验证,从站点 A 获取站点 B 可以信任的令牌,然后将该令牌交给站点 B。

实际上,您希望构建一个非常具体的 OpenID 或 OAuth 案例。这当然是可能的,但是您需要对 www.example.com 进行一些更改才能使其正常运行。如果你能做到这一点,那就太好了。

首先阅读有关 OAuth 的所有内容。您不需要完全使用它(尽管您可以),但它有助于解释您需要做什么:http://hueniverse.com/oauth/

【讨论】:

  • 为此,我需要打开两个站点吗?还是从站点 1 到站点 2 的链接?
  • 后者。您实际上需要链接这些站点。想象一下,如果站点 A 是 LiveJournal 之类的站点,站点 B 是堆栈溢出之类的站点。您可以使用您的 LiveJournal 帐户以与我建议您解决此问题的方式大致相同的方式登录 Stack Overflow。假设您在站点 B 上单击“登录”。它会将您重定向到站点 A。站点 A 验证您的身份验证 cookie,然后将您重定向到站点 B 并包含一个签名的“将此用户作为用户 X 进行身份验证”参数。站点 B 识别身份验证并将您登录到站点 B。它们一起工作。
  • 是的,我明白你的意思。它叫OpenID,但我的问题是站点A不提供这种服务,但它有自己的登录屏幕。当用户访问站点 A 时,浏览器会创建一个 cookie,当用户访问站点 B 时,我希望站点 B 访问站点 A 中创建的 cookie。可以这样做吗?
  • 没有。跨域 cookie 基本上是不允许的。我正在描述一种解决您的要求的方法,而不是一种启用跨域 cookie 的方法。有一个例外:您可以在站点 B 上嵌入一个 iframe,以呈现站点 A 生成的内容。这将允许站点 A 读取和处理站点 A 的 cookie,但用户会认为他们正在使用站点 B。但是,仍然存在无法在这些 iframe 之间进行通信。直接跨域cookie是不可能的。
  • 正确。有很多方法可以解决它,但所有这些方法都需要站点 A 和站点 B 协调和协同工作。您不能仅仅通过仅修改站点 B 来完成此操作,原因与您不能允许人们在您的站点上使用他们的亚马逊帐户相同。网络经过精心设计,旨在防止您这样做。
【解决方案2】:

您可以跨域的不同子域共享 cookie,但不能跨多个域名共享 cookie。

Cookie 由浏览器存储,浏览器不允许您访问或存储来自外部域名的 Cookie。如果浏览器确实允许您这样做,那将是一个巨大的安全漏洞。

但是,您可以在域名之间共享存储在服务器上的会话数据。这可能不是完全微不足道的,但由于会话信息存储在服务器上,如果需要,您可以在应用程序之间访问服务器上的信息。如果您的会话数据存储在数据库中,那么所需要做的就是授予对两个域的数据库访问权限。如果需要,您实际上可以将数据库打开到外部域名,并让外部域直接连接到您服务器上的数据库。

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 2014-11-18
    • 2011-03-21
    • 2016-02-03
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多