【问题标题】:antiforgery token in asp.net core razor pages?asp.net核心剃须刀页面中的防伪令牌?
【发布时间】:2019-06-13 21:13:36
【问题描述】:

我遇到了一个我不太明白的问题。

asp.net core 2.2.1 使用剃须刀页面,我不得不手动生成防伪令牌,但所有文档似乎都声称剃须刀页面不需要。

关于我在这里做错了什么的任何见解?

如果您从下面的表单中删除 @Html.AntiForgeryToken(),则不会添加令牌。如果这是你应该做的,那很好,我已经完成了,但我能找到的每个来源似乎都认为这没有必要。

<form method="post">
    @Html.AntiForgeryToken()
    <div>Source Type: <input asp-for="filter.SourceType" value="JsonEvent"/></div>
    <div>Source Name: <input asp-for="filter.SourceName"/></div>
    <input type="submit"/>
</form>

【问题讨论】:

  • 我遇到了同样的问题,但我通过忽略防伪令牌 [IgnoreAntiforgeryToken(Order = 1001)] 解决了这个问题
  • Order = 1001 有什么用?我做了一些搜索,找不到任何解释它的东西。这似乎是一个优先事项,但对于该属性来说似乎很奇怪。
  • github.com/aspnet/Mvc/issues/7012我已经按照这个问题的建议做了
  • 关键是Order参数。内置 [ValidateAntiforgeryToken] 的顺序为 1000,因此将 [IgnoreAntiforgeryToken] 显式设置为大于 1000 的任何值都可以解决问题。

标签: razor asp.net-core asp.net-core-2.2


【解决方案1】:

当您使用 ASP.NET Core Razor 页面时,您绝对不需要在表单元素中使用 @Html.AntiForgeryToken() 之类的代码来生成 AntiForgeryToken。提交表单时会自动生成并提交令牌。

您可以通过检查浏览器的开发工具部分来验证这个想法。您可以检查标头,您将看到一个表单数据“_RequestVerificationToken”,如此屏幕截图所示。

但是,请注意,您的 Ajax 请求是不同的。例如,如果您使用 jQuery Ajax 方法发布到任何 Razor 页面的 Post 处理程序,那么您将需要显式生成令牌并将标头与您的请求一起传递。

【讨论】:

    【解决方案2】:

    根据Documentation,不需要添加@Html.AntiForgeryToken(),因为您使用的标记就足够了:

    <form method="post">
    ...
    </form>
    

    我会检查令牌是否未设置在此article 中所述的表单底部

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2021-01-05
      • 2020-12-08
      • 2019-01-19
      • 2021-10-07
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多