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

标签 google-chrome cookies asp.net-core-mvc claims-based-identity

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

  • App 1 是一个 MVC 应用程序,用于对用户进行身份验证。
  • 应用 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 指令:“.AspNet.Microsoft.AspNet.Identity.Application”(用于身份验证)

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

    所有这些都可以正常工作 - 好吧,它可以在 IE 中正常工作。这让我想到了一个问题,为什么这在 Chrome 中不起作用?我看到“Set-Cookie”指令从 chrome 中的 web 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
    

    最佳答案

    就我而言,我们有一个 C# ASP.NET Core 2.1 MVC 应用程序当我在 Google Chrome 中启动时,它运行良好。但是有一天它停止工作了。
    在 Google Chrome 开发人员工具中,我在下面看到
    首先,我注意到 应用程序 -> 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.


    我在下面做了修复它。
    在我们的应用程序中,启动.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

    关于google-chrome - 在开发人员中运行时未在 Google Chrome 中设置 ASP.net 核心身份验证 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006238/

    相关文章:

    Firefox 和 Chrome 中的 CSS 字体差异

    asp.net-mvc - 多个复选框表单的 ASP.Net MVC6 语法

    javascript - 使用全屏 API 触发全屏时,双指缩放在 macOS (Chrome) 上不起作用

    javascript - 双显示器上的 Chrome Javascript 弹出窗口已关闭

    c# - Cookie 存在但 Request.Cookies 抛出 NullReferenceException

    ios - NSHTTPCookieStorage 不会自动保存 cookie

    asp.net-mvc - MVC Core 2.0 Cookie 身份验证 LoginPath 选项

    c# - 操作无法完成。无效指针 - Visual Studio 2015 Update 3

    javascript - 如何使用页面操作为每个 url 显示弹出窗口?

    python - Selenium:driver.get_cookies() 返回不完整的 cookie 列表