Google chrome 在开发人员中运行时,未在Google Chrome中设置ASP.net核心身份验证cookie

Google chrome 在开发人员中运行时,未在Google Chrome中设置ASP.net核心身份验证cookie,google-chrome,cookies,asp.net-core-mvc,claims-based-identity,Google Chrome,Cookies,Asp.net Core Mvc,Claims Based Identity,我的解决方案中有三个应用程序,都内置于asp.net core 1 MVC 6中 应用程序1是一个用于验证用户身份的MVC应用程序 App 2是一款Angular SPA应用程序,是解决方案中的主要应用程序 app3是一个mvcwebapi应用程序 在应用程序3中,我有通常的asp.net核心SignInManager和UserManager代码(与启动新MVC 6模板时默认获得的代码相同-唯一不同的是,它存在于我的web api中)。登录/注销/注册等通过我的AccountControll

我的解决方案中有三个应用程序,都内置于asp.net core 1 MVC 6中

  • 应用程序1是一个用于验证用户身份的MVC应用程序
  • App 2是一款Angular SPA应用程序,是解决方案中的主要应用程序
  • app3是一个mvcwebapi应用程序
在应用程序3中,我有通常的asp.net核心SignInManager和UserManager代码(与启动新MVC 6模板时默认获得的代码相同-唯一不同的是,它存在于我的web api中)。登录/注销/注册等通过我的AccountController中的web api方法公开。这允许我锁定web api,因此只处理经过身份验证的请求(使用[Authorize]属性)

当我在AccountController中调用“Login”方法时,如果登录成功,它将返回一个Set Cookie指令,其名称如下:“.AspNet.Microsoft.AspNet.Identity.Application”(用于身份验证)

然后,登录应用程序将用户从App1转发到App2。然后对web api(App3)的所有后续请求进行身份验证并允许执行。注意:后面的请求——具体地说,我是指在App2中,从web服务请求数据的角度调用

所有这些都很好——好吧,在IE中也很好。这就引出了我的问题,为什么这在Chrome中不起作用?我看到“Set Cookie”指令从chrome中web api登录的响应返回,但后续请求没有附加此Cookie

我做错了什么

注意: 来自登录方法的Http响应如下所示:

    HTTP/1.1 200 OK
        Cache-Control: no-cache
        Pragma: no-cache
        Content-Type: application/json; charset=utf-8
        Expires: -1
        Server: Kestrel
        Set-Cookie: .AspNet.Microsoft.AspNet.Identity.Application=CfDJ8FWIuvXs-TxKoIYE8259iAY52B_VZDPTTvYwZ-WAo8hhPCdLhmUfxNZD1wjxEt0sqqnZl6NomwHPNTNFkBxsq4cw_WkQYklnj_dK79wodIguLdPXAbKu6UbS6HKRBxFxjOKVAfIdyxZJ6xA2CtnR9nJC_CSg7v1vFSzgDEiSBso8D3aDNjzFk8
7oIJodC7WLVxWUqdUpjaGRCXqHTYjTwgL9DCihnajAlB921_oEPinUwIPP8g_ugCQmqbFq6kgQ-GwPTifBKRlbtwNsDwbetynl1gIqzELyjgEUAKgtpD9SX7FSjl1grxoGRjbPiXJe-k1SSdnUIHR7wYPkFpiis_c_P1pGkmSyeiDG-lf0xftTlXlnC3BWMbgXeWZn_hsDzbW_Tek3qiq_NB-T0IMGaJgjRnr5DARNcOACWbzwGvHFjsn7n0u7-UZOfzgQJ76d3ra-hjra
    -aNcHLgbfDef3TK6z_CKt2iIlnTkyEJXC-3OSGnfWDRvofvQ216UApEPiKoJxiCjWSvGAQCzvf9P1TtKuwAQVxfWz8pL077E-Wfc-4ybtrT6Ivz2VbdFng5Ze5IQ5YWfYYTpDhLSHGKnpFgxVf96f7JwoXlgRq0gs7yEWdWFZs6d18pw-El5sLJr7g; path=/; secure; httponly
        Access-Control-Allow-Origin: *
        X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUm9iZXJ0XERlc2t0b3BcSEJFIE1hbmFnZXJcTUFJTlxCbHVlem9uZSBXZWJBcGlcc3JjXEJ6LkFwcGxpY2F0aW9uXEJ6LkFwcGxpY2F0aW9uLkFwaVx3d3dyb290XGFwaVxhY2NvdW50XExvZ2lu?=
        X-Powered-By: ASP.NET
        Date: Wed, 04 May 2016 10:39:57 GMT
        Content-Length: 16

我也有同样的问题,它在IE、Edge中有效,但在Chrome、Firefox和Opera中无效

这似乎是一个cookie大小的问题,我解决了减少cookie中的数据的问题


请参见此了解尺寸限制:

嗨,我也有这个问题

虽然我的本地主机环境在VS中运行良好,并且我的用户可以登录,但在发布的chrome环境中,这并不起作用

这始于我在预生产环境中尝试IIS中的一些自签名证书,方法是使用配置好的绑定在https上运行。然后我又回到了http

您可以在Chrome中尝试以下操作:打开开发者工具转到选项卡应用程序,然后在左窗格中选择清除存储。在右键的图表下单击清除站点数据,即使使用情况显示使用了0字节。无论如何都要做

最后,我得到了带有登录功能的应用程序


希望这也能对其他人有所帮助。

在我的例子中,我们有一个C#ASP.NET Core 2.1 MVC应用程序,当我在Google Chrome中启动时,它运行良好。但有一天天气晴朗,它停止了工作

在下面我看到的谷歌Chrome开发者工具中

首先,我注意到应用程序->Cookies.AspNetCore.Session丢失。

其次,在控制台中,我注意到以下警告

与位于的资源关联的cookiehttp://myapplication.company.net/ 设置为SameSite=None,但没有安全设置。它已被阻止,因为Chrome现在只提供标记为SameSite=None的cookie,如果它们也标记为安全的。您可以在“应用程序>存储>cookies”下的“开发人员工具”中查看cookies,并在中查看更多详细信息https://www.chromestatus.com/feature/5633521622188032.

我做了下面的工作来修复它

在我们的应用程序中,在Startup.cs中,我有如下内容

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.MinimumSameSitePolicy = SameSiteMode.None;
     
  });
}
public void ConfigureServices(IServiceCollection services)
{
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.MinimumSameSitePolicy = SameSiteMode.Strict;
     
  });
}
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
options.MinimumSameSitePolicy=SameSiteMode.None;
});
}
我们的变化如下

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.MinimumSameSitePolicy = SameSiteMode.None;
     
  });
}
public void ConfigureServices(IServiceCollection services)
{
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.MinimumSameSitePolicy = SameSiteMode.Strict;
     
  });
}
public void配置服务(IServiceCollection服务)
{
配置(选项=>
{
options.MinimumSameSitePolicy=SameSiteMode.Strict;
});
}

它解决了这个问题。我还注意到,在开发者工具中,我现在可以看到应用程序->Cookies.AspNetCore.Session

托管这3个应用程序的域是相同的吗?是的,就像在中一样,它的本地主机,然后每个应用程序都有一个不同的端口。这可能是问题所在,我发现了一些关于Chrome和本地主机Cookies的问题,请看,确认它即使在声明了“使用了0字节”。您刚刚保存了我的一天。也为我工作。我在Chrome上遇到了此问题(没有其他浏览器)在本地主机上运行时。+1谢谢,在尝试调试运行正常的应用程序3个小时后,保存了我的理智。.你保存了一天,兄弟。.非常感谢。这发生在我身上,使用Asp.Net Core 3.1和最新Chrome的同意cookie。与SameSiteMode完美配合。Strict发生在我身上,使用的是AS上的语言cookieP.NET Core 3.1。尝试修复它花费了3-4个小时,此配置工作正常。谢谢!