为什么Cookie不会仅发送到API主机上的API端点?

时间:2019-05-27 22:09:38

标签: authentication iis asp.net-core cookies

我的API具有身份验证端点A,该端点应返回身份验证cookie。端点B需要身份验证cookie。访问端点A之后,当我访问Chrome中的端点B(在实时VM上,不涉及localhost)时,我的开发机和单独的测试客户端计算机都始终成功进行身份验证。我可以在对端点B的那些请求中看到 cookie 标头。

同时,当从托管VM本身访问活动端点B时,身份验证似乎成功,但是在尝试访问端点B时Chrome被重定向。日志记录表明未在向端点B的请求中发送身份验证cookie。

在使用Postman时,我的开发机器和VM均会收到 set-cookie 标头(我必须在两台机器上都禁用SSL验证才能正常工作)。

Cookie看起来像这样,尽管我尝试过也没有域,安全和相同站点策略(递增):

cName=cValue; expires=Tue, 11 Jun 2019 02:21:06 GMT; domain=.mydomain.net; path=/; secure; samesite=lax

问题:什么会阻止VM上的Chrome发送Cookie?我曾尝试过调整Cookie的属性,以防出现问题。

上下文

  • asp.net核心版本:2.2
  • Cookie.httpOnly:false
  • Cookie.SameSite:我尝试过None和Lax,因为cookie是从chrome扩展程序请求的。
  • Cookie.Secure:我尝试过是非。
  • Cookie.Domain:我尝试了多个值,但未进行设置。
  • CORS已被使用并且是敞开的。
  • 我为该站点安装了受信任的SSL证书。

1 个答案:

答案 0 :(得分:0)

我需要学习一些CORS知识才能实现自己的目标。我发现一个非常有用的msdn article。简而言之,为了使浏览器满意并接受服务器上所需的请求,需要对客户端和服务器进行以下更改。

这引起了我的直接问题:

  • 必须在客户端将XMLHttpRequest.withCredentials设置为true,以免在响应(paragraph 2)中忽略身份验证cookie。
  • 必须在Startup.cs的Configure()中调用CorsPolicyBuilder.AllowCredentials()才能接收withCredentials请求。

奇怪的是,没有它,它在托管服务器之外的所有地方都可以正常工作,我仍然无法解释。

我需要纠正的其他烦人细节可能使问题蒙上阴影:

  • 必须根据用例适当设置Cookie的域
  • Cookie的SameSite属性必须为宽松
  • UseCors()
  • CorsPolicyBuilder.WithOrigins(new string [] {“ domain-a”,“ domain-b”})