我的解决方案中有三个应用程序,都内置在 asp.net core 1 MVC 6 中。
在应用程序 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/