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

ASP.net core auth cookie not being set in Google Chrome when running in dev

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

在应用程序 3 中,我有通常的 asp.net 核心 SignInManager 和 UserManager 代码(与您启动新的 MVC 6 模板时默认获得的代码相同 - 唯一不同的是,它存在于我的网站中api 这里)。 login/logout/register 等通过我的 AccountController 中的网络 api 方法公开。这允许我锁定网络 api,因此只有经过身份验证的请求才会得到处理(使用 [Authorize] 属性)。

当我在我的 AccountController 中调用 "Login" 方法时,如果登录成功 - 它 returns 具有以下名称的 Set-Cookie 指令:“.AspNet.Microsoft.AspNet.Identity.Application”(这用于身份验证)

登录应用然后将用户从 App1 转发到 App2。然后对网络 api (App3) 的所有后续请求进行身份验证并允许执行。注意:通过后续请求 - 具体来说,我的意思是,在 App2 中,angular 调用以从 Web 服务请求数据。

所有这些工作正常 - 好吧,它在 IE 中工作正常。这引出了我的问题,为什么这在 Chrome 中不起作用?我看到 "Set-Cookie" 指令从 Web api 登录 chrome 的响应返回,但后续请求没有附加此 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中的数据。

查看大小限制:chrome cookie size limit

嗨,我也遇到了这个问题。

虽然我在 VS 中的本地主机环境工作正常并且我的用户可以登录,但这在 chrome 的已发布环境中不起作用。

这开始于我在我的预生产环境中通过在 https 上使用配置的绑定来尝试 IIS 中的一些自签名证书。然后我回到了 http.

您可以在 Chrome 中尝试的是:打开开发人员工具转到选项卡 应用程序 并在左侧窗格中选择 清除存储。在右侧的图表下,即使使用情况显示已使用 0 字节,也请单击 清除站点数据。无论如何都要这样做。

我终于得到了带有登录功能的应用程序。

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

就我而言,我们有一个 C# ASP.NET Core 2.1 MVC 应用程序,当我在 Google Chrome 中启动时它运行良好.但是有一天它停止工作了。

在GoogleChrome我在下面看到的开发者工具

首先,我注意到 Application -> Cookies .AspNetCore.Session 不见了。

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

A cookie associated with a resource at http://myapplication.company.net/ was set with SameSite=None but without Secure. It has been blocked, as Chrome now only delivers cookies marked SameSite=None if they are also marked Secure. You can review cookies in developer tools under Application>Storage>Cookies and see more details at 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;
     
  });
}

它解决了这个问题。我还注意到现在在开发人员工具中我可以看到 Application -> Cookies .AspNetCore.Session