Ajax保存但不将CORS cookies从127.0.0.1发送到服务

Ajax保存但不将CORS cookies从127.0.0.1发送到服务,ajax,cookies,cross-domain,Ajax,Cookies,Cross Domain,因此,我在向服务发送带有跨域请求的cookie时遇到问题。我必须让它在我们的CI环境中工作,但不能在本地工作。基本上,我在API.service.com上有一个API,可以通过webapp.service.com上的客户端运行的AJAX调用来访问它。API通过设置cookie为.service.com设置cookie。然后,对API的所有后续调用都应包含此cookie。当从webapp.service.com运行时,这会按预期工作。这将在prod中正常工作。然而,出于明显的原因,我希望能够在本地

因此,我在向服务发送带有跨域请求的cookie时遇到问题。我必须让它在我们的CI环境中工作,但不能在本地工作。基本上,我在
API.service.com
上有一个API,可以通过
webapp.service.com
上的客户端运行的AJAX调用来访问它。API通过
设置cookie
.service.com
设置cookie。然后,对API的所有后续调用都应包含此cookie。当从
webapp.service.com
运行时,这会按预期工作。这将在prod中正常工作。然而,出于明显的原因,我希望能够在本地开发webapp,并从本地文件或
localhost
服务对
API.service.com
运行API调用

我知道Chrome在为本地文件保存cookies方面有点不确定,但我已经解决了这个问题,这不是问题所在。事实上,饼干是在保存。它只是不发送带有后续API调用的cookie。以下是我正在进行的工作流程(使用一些通用/经过审查的产品名称):

一个AJAX调用发布到我们的API:

$.ajax({
  method: "POST",
  crossDomain: true,
  xhrFields: {
    withCredentials: true,
  },
  url: 'https://api.service.com/login',
  data: data,
  contentType:"text/plain",
  dataType: "json",
  success: function(data){
    ...
  }
});
CORS设置为允许凭据和此源(允许的源动态更新,不使用
*
。因此我们将此cookie取回:
cookie:service token=7f7d251ebeec37f7c0815….;SameSite=lax;Max Age=2629744;domain=.service.com;path=/;

它在Chrome中显示如下:

我知道这实际上可以保存cookie。但是,可能不是我想要的方式。我进入Chrome的cookie,它会正确更新,如图所示:

我看到的问题是,它的“send for”值是“仅同一站点连接”。我不知道最初如何为Chrome设置该值以将其视为“任何类型的连接”。我认为这就是为什么当我发送另一个AJAX调用时,请求中不包括cookie的原因

我见过其他类似的帖子,它们通过向AJAX调用添加
crossDomain
和/或
withCredentials
来解决。这对我来说并没有解决问题。这是对API的后续调用:

$.ajax({
  url: 'https://api.service.com/getTheThing',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  },
  success: function(data){...}
});

cookie未包含在此请求中,因此失败。

事实证明,设置
SameSite=lax
与我的预期相反。删除该设置解决了此问题。

我对此感到惊讶。将设置删除为
lax
修复了chrome版本64.0.3282.168
options.cookie.SameSit中的行为e=Microsoft.AspNetCore.Http.SameSiteMode.None;