为asp.net身份(低于NET 4.7.2)生成的身份验证Cookie设置SameSite Cookie属性。

时间:2020-08-27 10:12:54

标签: asp.net-mvc asp.net-identity

几天前,我在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重写等)。

根据thisthisthis,我已经设置了CookieSameSite属性(请参见上文)。但是,由于here中的静态构造函数杂技将其绑定到.NET Framework的更高版本,因此无法使用。

为了解决此框架限制,我扩展了SystemWebCookieManager(有点黑了)。 Gist(第107行)。有人走这条路吗?并在生产中造成奇怪的行为。

我知道此解决方案不适用于CSRF或SessionId cookie,但就我而言,这是可以的。我还注意到,也有一个Chunked Cookie管理器,我想(希望)我不会碰到分块的用例。

0 个答案:

没有答案