2017-05-25 80 views
0

我有一种情况,我尝试在子域之间使用单个Http唯一身份验证cookie。可以在子域中发送共享Cookie

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

然而,当我做一个简单的GET请求回我的身份验证服务器,以获得一个完整的授权令牌,身份验证cookie不会被发送:

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

是无法发送cookie即使在交子像这样的域名请求?

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

回答

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标头。

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