【问题标题】:Can Shared Cookies Be Sent Across Sub-Domains共享 Cookie 可以跨子域发送吗
【发布时间】:2017-10-25 12:24:54
【问题描述】:

我有一种情况,我试图跨子域使用单个 Http-Only 身份验证 cookie。

我已验证身份验证响应设置了 cookie,我将响应中的域视为 .mydomain.com。如果我在 Chrome 中打开 cookie 查看器(设置 -> 显示高级设置 -> 内容设置 -> 所有 cookie 和站点数据 ...)我看到我的身份验证 cookie 存储在 mydomain.com 下(没有前导“。”,不知道为什么)。

但是,当我向我的身份验证服务器发送一个简单的 get 请求以获取完整的授权令牌时,身份验证 cookie 不会发送:

//Sent from http://app.mydomain.com
$.get('http://auth.mydomain.com', null, function(fullAuthorizeTok) {}); 

这样的跨子域请求是不是也不能发送cookies?

我使用 Http-Only 身份验证 cookie 来防止 XSS 攻击,然后使用手动提交的授权令牌来防止 XSRF 攻击。这部分是应用程序已经通过身份验证并正在从服务器请求授权令牌的部分,我希望这可以从客户端 JS 中实现。

【问题讨论】:

    标签: google-chrome cookies cross-domain subdomain


    【解决方案1】:

    请求必须明确跨域才能发送 cookie。我认为如果在所述子域之间共享 cookie,浏览器会隐式地跨子域发送 cookie,但事实并非如此。请求需要如下所示:

    $.ajax({
        url: 'http://auth.mydomain.com',
        method: 'GET',
        crossDomain: true,
        data: {},
        xhrFields: {
            withCredentials: true
        },
        success: function (tokenStr) {
            //Do Stuff
        },
        error: function (jqXHR, type, exception) {
             alert('Oh Dear.');
        }
    });
    

    当然,响应应该包括适当的 CORS 标头。

    作为旁注。如果它们不共享相同的父域,则这不适用于跨域。因此,您可以将 cookie 从“app.mydomain.com”发送到“auth.mydomain.com”,但不能发送到“auth.mydomain2.com”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 2013-02-13
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多