我遇到的情况是我试图在子域中使用单个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获得。
答案 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'。