【发布时间】:2020-12-28 02:34:21
【问题描述】:
我开发混合网站应用程序。 这意味着主要应用程序,例如www.zyjangi.pl 为 www.langia.pl 或 www.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