如何在 MVC5 中的 AntiForgertyToken cookie 上设置 SameSite=None?
How can I set SameSite=None on the AntiForgertyToken cookie in MVC5?
我们正在使用内置的 ValidateAntiForgeryToken 属性和 @Html.AntiForgeryToken() 帮助程序在 MVC5 中实施跨站点脚本保护。
一切正常。但是,我们的应用程序在不同域的框架中运行。因此,我们需要将 cookie 设置为 SameSite=none(就像我们对会话和身份验证 cookie 所做的那样)。
我找不到配置 cookie 以包含此设置的方法。
我尝试创建一个 OWIN 中间件来检查输出的 cookie 并更新它,但是 OWIN 上下文中响应中的 cookie 集合是只读的。
如何在 cookie 上获得此设置?
将此添加到 global.asax.cs 以将令牌设置为同一站点 = none 应该可以修复它
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
// This code will mark the __RequestVerificationToken cookie SameSite=None
if (Request.Cookies.Count > 0)
{
foreach (string s in Request.Cookies.AllKeys)
{
if (s.ToLower() == "__requestverificationtoken")
{
HttpCookie c = Request.Cookies[s];
c.SameSite = System.Web.SameSiteMode.None;
Response.Cookies.Set(c);
}
}
}
}
我们正在使用内置的 ValidateAntiForgeryToken 属性和 @Html.AntiForgeryToken() 帮助程序在 MVC5 中实施跨站点脚本保护。
一切正常。但是,我们的应用程序在不同域的框架中运行。因此,我们需要将 cookie 设置为 SameSite=none(就像我们对会话和身份验证 cookie 所做的那样)。
我找不到配置 cookie 以包含此设置的方法。
我尝试创建一个 OWIN 中间件来检查输出的 cookie 并更新它,但是 OWIN 上下文中响应中的 cookie 集合是只读的。
如何在 cookie 上获得此设置?
将此添加到 global.asax.cs 以将令牌设置为同一站点 = none 应该可以修复它
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
// This code will mark the __RequestVerificationToken cookie SameSite=None
if (Request.Cookies.Count > 0)
{
foreach (string s in Request.Cookies.AllKeys)
{
if (s.ToLower() == "__requestverificationtoken")
{
HttpCookie c = Request.Cookies[s];
c.SameSite = System.Web.SameSiteMode.None;
Response.Cookies.Set(c);
}
}
}
}