【问题标题】:ASP MVC doesn't set SameSite attribute in .ASPXAUTH cookieASP MVC 未在 .ASPXAUTH cookie 中设置 SameSite 属性
【发布时间】:2020-12-28 02:34:21
【问题描述】:

我开发混合网站应用程序。 这意味着主要应用程序,例如www.zyjangi.plwww.langia.plwww.staria.pl 等其他网站提供内容 主网站的此内容被加载到子网站的 iframe 中。 iframe 似乎是共享内容的简单方便的方式。 正因为如此,它很容易分享,例如许多页面上的相同日历或事件。 主网站和子网站托管在不同的提供商处。 主要应用程序是在 ASP.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”期望 要明确设置为“SameSite=None”的 cookie 并且因为这个问题应用程序在“谷歌浏览器”中无法正常工作。 “谷歌浏览器”发送以下消息,用户未登录:

此 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”属性添加到响应中? 是否有任何“解决方法”来克服这个问题。

【问题讨论】:

    标签: google-chrome model-view-controller cookies samesite


    【解决方案1】:

    这是我尝试过的:

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

    2. 我还在 web.config 中添加了这些值:

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

    我是这样解决的。

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 2020-05-01
      • 2020-04-25
      • 2013-05-01
      • 2019-09-27
      • 2020-04-18
      • 1970-01-01
      • 2018-11-21
      • 2019-05-14
      相关资源
      最近更新 更多