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 中。
- App 1 是一个用于对用户进行身份验证的 MVC 应用程序。
- 应用 2 是一个 Angular SPA 应用,是解决方案中的主要应用。
- App 3 是一个 MVC web api 应用程序。
在应用程序 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
我的解决方案中有三个应用程序,全部内置在 asp.net core 1 MVC 6 中。
- App 1 是一个用于对用户进行身份验证的 MVC 应用程序。
- 应用 2 是一个 Angular SPA 应用,是解决方案中的主要应用。
- App 3 是一个 MVC web api 应用程序。
在应用程序 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