可以在子域中发送共享Cookie
问题描述:
我有一种情况,我尝试在子域之间使用单个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获得。
答
请求必须明确跨域才能发送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”。