ASP.NET MVC 未在 .ASPXAUTH cookie 中设置 SameSite 属性

我开发混合网站应用程序。这意味着主要应用程序,例如 www.zyjangi.plwww.langia.plwww.staria.pl 等其他网站提供内容。

主网站的此内容被加载到子网站的 iframe 中。 iframe 似乎是共享内容的简单方便的方式。

正因为如此,它很容易分享,例如许多页面上的相同日历或事件。

主网站和子网站托管在不同的提供商处。主应用程序在 ASP.NET MVC 中开发并在 .NET Framework 4.8 上运行。我正在使用表单身份验证登录,即。

FormsAuthentication.SetAuthCookie(model.Login, model.RememberMe);

登录表单在主应用程序中并在子应用程序的 iframe 中运行。

web.config 文件中,我将“SameSite”设置为“None”以进行身份​​验证和会话。

<forms loginUrl="~/Account/Login" cookieSameSite="None" requireSSL="true" timeout="2880" />
<sessionState cookieSameSite="None" timeout="60" />

不幸的是,在这种配置中, .ASPXAUTH cookie 中完全省略了“SameSite”属性。

cookieSameSite="Lax"cookieSameSite="Strict" 时添加属性,而 cookieSameSite="None" 时省略属性。

在此架构方案中,新版本的“Google Chrome”期望 cookie 明确设置为“SameSite=None”,因为此问题应用程序在“Google Chrome”中无法正常工作。

谷歌浏览器发送以下消息并且用户未登录:

此 Set-Cookie 未指定“SameSite”属性,默认为“SameSite=Lax”,并被阻止,因为它来自跨站点响应,而不是对顶级导航的响应。
Set-Cookie 必须设置为“SomeSite=None”才能启用跨站点使用。

在拦截期间设置“SameSite”属性,例如。

var cookie = Response.Cookies[".ASPXAUTH"];

if (cookie != null)
{
   cookie.Secure = true;
   cookie.SameSite = SameSiteMode.Strict;
}

也不行。响应中省略了该属性。

您可以在 www.langia.pl 网站上查看。

它在 FireFox 或 Edge 中正常工作,但在 Chrome 中不能。用户无法登录应用程序。

我该怎么做才能强制将“SameSite=None”属性添加到响应中?

是否有任何“解决方法”来克服这个问题。

stack overflow ASP.NET MVC doesn't set SameSite attribute in .ASPXAUTH cookie
原文答案

答案:

作者头像

这是我试过的:

  1. cookie samesite 属性在你再次登录时改变(不会随着页面刷新而改变)。

  2. 我还将这些值添加到 web.config 中:

    
    <httpCookies requireSSL="true" />
       <sessionState cookieSameSite="None" >
    </sessionState>


我是这样解决的。