Firefox 未设置通过 XHR CORS 请求接收的 Cookie

Posted

技术标签:

【中文标题】Firefox 未设置通过 XHR CORS 请求接收的 Cookie【英文标题】:Firefox does not set Cookie received with XHR CORS request 【发布时间】:2019-03-04 11:53:41 【问题描述】:

我正在尝试在域“example.com”上构建一个登录站点,该站点将 Ajax 请求发送到域“other_domain.com”,如果凭据正常,则此请求会发回会话 cookie。之后我想重定向到“other_domain.com”网站并想登录。

我有一个适用于 IE11、Edge、Chrome 但不适用于 Firefox 的解决方案,因为当我重定向到“other_domain.com”站点时,Firefox 不会设置返回的 cookie。

这是ajax请求代码:

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open('POST', 'https://other_domain.com/login', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () 
    if (this.status == 200 && this.readyState == 4) 

        window.location.replace("https://other_domain.com/app");

    
;
xhr.send(JSON.stringify(payload));

如果凭据正确,我可以在每个浏览器上看到 OPTIONS 请求成功,并且 AJAX 发布在每个浏览器上都返回 200 OK。

返回的 cookie 具有以下值:

CreationTime: "Fri, 28 Sep 20018 12:48:49 GMT"
Domain: "other_domain.com"
Expires: "Session"
HostOnly: true
HttpOnly: true
LastAccessed: "Fri, 28 Sep 20018 12:48:49 GMT"
Path: "/"
Secure: true
sameSite: "Lax"

标记为重复后的其他信息:

我可以在开发者控制台中看到,上面代码中的 OPTIONS 和 POST 请求返回了以下标头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://example.com

我也可以在 Firefox 的响应中看到具有正确值的 Set-Cookie 标头,但在重定向到 other_domain.com 后未设置 cookie。 此外,我的 Firefox 设置为“接受第三方 cookie 和站点数据”-“始终”

【问题讨论】:

CORS 具有 Access-Control-Allow-Credentials: true developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… ? 并确保您没有使用 localhost 进行测试 ***.com/a/13967269/597200 看这个以获得更好的解释***.com/a/24689738/597200 Access-Control-Allow-Credentials 标头已设置,Origin 标头也设置为正确的域。我也不在本地主机上测试。它适用于除 Firefox 之外的所有浏览器。也许 Firefox 需要一些额外的 CORS 设置,但我在搜索中没有找到任何东西 根据更新的问题重新打开 【参考方案1】:

我有同样的问题。查看 Set_Cookie,它是否具有 SameSite=lax 属性。如果是这样,在服务器上设置 cookie 时将该属性设置为 None。 在 .NET 中创建 cookie 时,您可以选择 lax、strict 或 none。

https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcookie.samesite?view=netframework-4.7.2

【讨论】:

感谢您的回答。与此同时,我重构了我的解决方案,它不需要 CORS cookie。我的 cookie 将 samesSite 设置为 lax,因此您的解决方案可能有效 - 但我无法测试。我不知道我是否应该接受你的回答,因为我现在无法检查。

以上是关于Firefox 未设置通过 XHR CORS 请求接收的 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

CORS XHR 重定向不起作用

Safari不会在Apache上的Vue.js应用程序中加载预检CORS身份验证请求(XHR)

Socket.io 未设置 CORS 标头

Mac 浏览器似乎吞下了最初的 CORS XHR 预检请求

浏览器不保存从CORS请求获取的身份验证cookie

将 Spring Security(双向 SSL)配置为仅对 CORS 预检 OPTIONS 请求进行身份验证