我正在尝试在域“ 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和站点数据”-“始终”
答案 0 :(得分:1)
我有同样的问题。查看Set_Cookie,它是否具有SameSite = lax属性。如果是这样,请在服务器上设置cookie时将该属性设置为None。 在.NET中,创建Cookie时,您可以选择松散,严格或没有。
https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcookie.samesite?view=netframework-4.7.2