共享cookie可以跨子域发送吗
Can Shared Cookies Be Sent Across Sub-Domains
我有一种情况,我试图跨子域使用单个 Http-Only 身份验证 cookie。
我已验证身份验证响应设置了 cookie,我在响应中看到域为 .mydomain.com。如果我在 Chrome 中打开 cookie 查看器(设置 -> 显示高级设置 -> 内容设置 -> 所有 cookie 和站点数据 ...),我会看到我的 auth cookie 存储在 mydomain.com 下(没有前导 ' .',不知道为什么)。
但是,当我向我的身份验证服务器执行简单的获取请求以获取完整的授权令牌时,身份验证 cookie 未发送:
//Sent from http://app.mydomain.com
$.get('http://auth.mydomain.com', null, function(fullAuthorizeTok) {});
像这样跨子域请求是不是也不能发送cookie?
我使用仅 Http 身份验证 cookie 来防止 XSS 攻击,然后使用在有效操作上手动提交的授权令牌来防止 XSRF 攻击。这一点是应用程序已经过身份验证并正在从服务器请求授权令牌的部分,我希望这可以从客户端 JS 实现。
请求必须明确 cross-domain 才能发送 cookie。我认为浏览器会隐式地在 sub-domains 之间发送 cookie,如果它们在所述 sub-domains 之间共享,但事实并非如此。请求需要如下所示:
$.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 headers。
作为旁注。如果它们不共享相同的 parent 域,则这不适用于跨域。因此,您可以将 cookie 从 'app.mydomain.com' 发送到 'auth.mydomain.com',但不能发送到 'auth.mydomain2.com'。
我有一种情况,我试图跨子域使用单个 Http-Only 身份验证 cookie。
我已验证身份验证响应设置了 cookie,我在响应中看到域为 .mydomain.com。如果我在 Chrome 中打开 cookie 查看器(设置 -> 显示高级设置 -> 内容设置 -> 所有 cookie 和站点数据 ...),我会看到我的 auth cookie 存储在 mydomain.com 下(没有前导 ' .',不知道为什么)。
但是,当我向我的身份验证服务器执行简单的获取请求以获取完整的授权令牌时,身份验证 cookie 未发送:
//Sent from http://app.mydomain.com
$.get('http://auth.mydomain.com', null, function(fullAuthorizeTok) {});
像这样跨子域请求是不是也不能发送cookie?
我使用仅 Http 身份验证 cookie 来防止 XSS 攻击,然后使用在有效操作上手动提交的授权令牌来防止 XSRF 攻击。这一点是应用程序已经过身份验证并正在从服务器请求授权令牌的部分,我希望这可以从客户端 JS 实现。
请求必须明确 cross-domain 才能发送 cookie。我认为浏览器会隐式地在 sub-domains 之间发送 cookie,如果它们在所述 sub-domains 之间共享,但事实并非如此。请求需要如下所示:
$.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 headers。
作为旁注。如果它们不共享相同的 parent 域,则这不适用于跨域。因此,您可以将 cookie 从 'app.mydomain.com' 发送到 'auth.mydomain.com',但不能发送到 'auth.mydomain2.com'。