带有Identity Server 4 SameSite Cookie的.NET Core 2.2更改问题

时间:2020-03-10 03:23:22

标签: asp.net-core-webapi identityserver4 asp.net-core-2.1

我有一个包含以下内容的单页Web应用程序

  1. Angular 8前端
  2. .Net Core Web Api后端
  3. .Net Core身份服务器身份验证服务器

我最近开始在控制台中看到一些警告,内容为:“设置了与跨站点资源关联的Cookie,但未添加'SameSite'属性。将来的Chrome浏览器将仅提供交叉-site请求是否将它们设置为“ SameSite = None”和“ Secure”。

因此,基于此,我们进行了一些研究,并获得了以下文章,该文章恰好解释了详细情况。 Explanation of Cookie Issue

我读了好几次文章,并认为我对它有所了解,但我仍在努力解决它的一个简单方面。在某些区域,他们要求您向“项目”中添加一些代码。我的问题是(仍然是Identity Server及其内部工作的新手),他们指的是“项目”。我不确定要在哪里放置它们提供的代码以解决此问题。

  1. 对我而言,将所提供的代码准确放置在何处并不是很明显。我有2种Visual Studio解决方案-一种代表我的身份验证服务器(身份服务器),另一种代表我的Web Api。我要添加以下代码解决方案的哪个Startup.cs文件?
  2. 如果将其添加到我的Identity Server项目中,我的困惑是我没有使用任何“基于Cookie的身份验证”,因此我的Identity Server项目中没有任何地方可以放置Cookie,并且我知道其中的一部分该文章中提到的解决方案是添加一个既“安全”又设置为“ Same-Site = None”的cookie。我在项目中的哪里创建这种类型的Cookie?
  3. 我确实注意到的另一件事是,一旦设置了cookie,就不会在执行注销时将其删除。

请记住,这些问题仅发生在运行Google Chrome的MacOS上。如果我在Windows PC上运行应用程序,我仍然会看到警告,但是我可以注销并清除所有现有的cookie

2 个答案:

答案 0 :(得分:0)

登录时,IdentityServer将始终创建cookie。 您可以在这里阅读更多内容-http://docs.identityserver.io/en/3.1.0/topics/signin.html

这意味着Identityserver使用cookie来验证用户

您可以按照以下步骤配置相同的站点cookie

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie("Cookies", options =>
            {
                options.Cookie.SameSite = SameSiteMode.Lax;
            });

答案 1 :(得分:0)

您将在Google Chrome中陷入控制台冲突,并且您的身份服务器无法重定向到客户端(可能是React App或适用于Chrome 80版本的Angular App)。

与资源at相关联的cookie设置为SameSite = None,但未设置安全。它已被阻止,因为Chrome现在仅发送标记为SameSite = None的cookie(如果它们也被标记为Secure)。您可以在Application> Storage> Cookies下的开发人员工具中查看cookie,并在https://www.chromestatus.com/feature/5633521622188032上查看更多详细信息。

要解决此问题,您需要进行以下链接中提及的更改-

https://www.thinktecture.com/en/identity/samesite/prepare-your-identityserver/

注意:对于.Net Core 2.2,设置SameSite =(SameSiteMode)(-1),对于.Net Core 3.0或更高版本,设置SameSite = SameSiteMode.Unspecified

此外,对于Chrome 80版本,请添加此额外条件-

 if ( userAgent.Contains("Chrome/8"))
            {
                return true;
            }