在dev中运行时,未在Google Chrome中设置ASP.net核心身份验证Cookie

Rob*_*abe 11 cookies google-chrome claims-based-identity asp.net-core-mvc

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

  • App 1是用于验证用户的MVC应用程序.
  • App 2是Angular SPA应用程序,是解决方案中的主要应用程序.
  • App 3是MVC web api应用程序.

在应用程序3中,我有通常的asp.net核心SignInManager和UserManager代码(当你启动一个新的MVC 6模板时默认获得相同的代码 - 只有不同的是,它存在于我的web api中).登录/注销/注册等通过我的AccountController中的web api方法公开.这允许我锁定web api,因此只有经过身份验证的请求才会被处理(使用[Authorize]属性).

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

登录应用程序然后将用户从App1转发到App2.然后对Web api(App3)的所有后续请求进行身份验证并允许执行.注意:通过后续请求 - 特别是我的意思是,在App2中,角度调用以从Web服务请求数据.

所有这一切都很好 - 嗯,它在IE中工作正常.这引出了我的问题,为什么这不适用于Chrome?我看到"Set-Cookie"指令从chrome api Login的响应中返回,但后续请求没有附加此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
Run Code Online (Sandbox Code Playgroud)

mon*_*see 22

你好我也有这个问题。

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

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

您可以在 Chrome 中尝试的是:打开 developer-tools goto tab Application并在左窗格中选择Clear storage。在右侧的图表下,即使使用情况显示使用了 0 字节,也单击清除站点数据。无论如何都要这样做。

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

希望这也能帮助别人。

  • 确认如果声明“0 字节已使用”,它甚至可以工作。你刚刚拯救了我的一天。 (2认同)

Zig*_*ler 9

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

在 Google Chrome 开发者工具中我看到了下面

首先,我注意到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;
     
  });
}
Run Code Online (Sandbox Code Playgroud)

我们改变如下

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.MinimumSameSitePolicy = SameSiteMode.Strict;
     
  });
}
Run Code Online (Sandbox Code Playgroud)

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