我们有一个基于ASP.NET的网站。我们需要在第三方的iframe中运行该网站。该网站的各个部分最近都停止在这种iframe情况下工作,我们已将其范围缩小到用户使用Chrome和AspNet.ApplicationCookie以及在iframe中不可用的几个自定义Cookie(在iframe外部运行没有问题)
该站点使用OWIN身份验证,因此我能够升级到ASP.NET 4.8和OWIN Nuget软件包。这使我可以在CookieSameSite
的{{1}}中设置CookieAuthenticationOptions
属性。之后,我可以看到AspNet.ApplicationCookie被标记为Secure并且SameSite = None。完美。
但是对于自定义cookie,我似乎无法使SameSite设置正常工作。创建cookie的代码是:
IAppBuilder
这些Cookie在iframe之外运行。使用Chrome和Firefox开发人员工具,我看到它们被标记为“安全”,但未设置SameSite设置(在Firefox开发人员工具中特别显示为“未指定”),因此在iframe中运行时它们仍然不可用。
一些相关的事情:
HttpContext.Current.Response.SetCookie(new HttpCookie(key, value)
{
Expires = expiration,
SameSite = SameSiteMode.None,
Secure = true
});
设置为“已禁用”,然后一切都会在iframe中正常运行。 (我认为这只是可以验证问题确实是SameSite)。SameSite by default cookies
我创建的Cookie是否错误?我是否不需要修补程序错了?有什么方法可以确定是否应该以某种方式归咎于负载均衡器?
更新-2020年8月17日
我还没有进一步解释这一点。对我有用的方法是使用出站IIS重写添加“ Secure; SameSite = None;”。所有cookie-这似乎是在4.7.2和4.8更新之前解决此问题的常用方法。
重写确实确保按预期设置了<httpCookies requireSSL="true" sameSite="None" />
和SameSite
。对我来说,这排除了以任何方式影响cookie的负载均衡器。
如果我是对的,那只剩下代码问题,但是,伙计,这看起来很简单。