可以跨子域发送共享Cookie

时间:2017-05-25 00:41:10

标签: google-chrome cookies cross-domain subdomain

我遇到的情况是我试图在子域中使用单个Http-Only身份验证cookie。

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

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

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

即使在像这样的跨子域请求中,也无法发送cookie吗?

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

1 个答案:

答案 0 :(得分:0)

请求必须明确跨域才能发送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标头。

作为旁注。如果他们不共享相同的父域,则这不适用于域。所以你可以从app.mydomain.com发送一个cookie' to' auth.mydomain.com',但不是' auth.mydomain2.com'。