几天前,我在Google Chrome浏览器中被SameSite cookie属性实施方法咬住了。我的问题是我在.NET 4.7.1上,并且升级.NET Framework是“基于票证的”,因此交货时间过长。该站点本身使用ASPNET Identity来发布身份验证cookie。配置如下所示:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/"),
CookieName = "cookie-name",
CookieSameSite = SameSiteMode.None,
CookieManager = new SystemWebCookieManagerInNet471(),
CookieSecure = CookieSecureOption.SameAsRequest,
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsAjaxRequest(ctx.Request)) // Fail handler for HTTP request
{
// Stuff here
}
else
{
ctx.Response.Redirect(ctx.RedirectUri); // Fail handler for AJAX request
}
}
}
});
为我的案例设置SameSite属性的解决方法根本不理想(URL重写等)。
根据this,this和this,我已经设置了CookieSameSite属性(请参见上文)。但是,由于here中的静态构造函数杂技将其绑定到.NET Framework的更高版本,因此无法使用。
为了解决此框架限制,我扩展了SystemWebCookieManager(有点黑了)。 Gist(第107行)。有人走这条路吗?并在生产中造成奇怪的行为。
我知道此解决方案不适用于CSRF或SessionId cookie,但就我而言,这是可以的。我还注意到,也有一个Chunked Cookie管理器,我想(希望)我不会碰到分块的用例。