【问题标题】:Problem with Validate Anti Forgery验证防伪问题
【发布时间】:2011-02-19 14:06:32
【问题描述】:

我对 MVC Anti forgery 令牌有疑问。 当我进行身份验证时,我有这样的伪代码:

var user = userRepository.GetByEmail(email);
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = user;

通过这样做,我可以像这样在我的代码中获取当前用户:

var user = HttpContext.Current.User as EntityUser;

在我将 [ValidateAntiForgeryToken] 属性添加到操作之前,这可以正常工作。 当我添加属性时,我得到 ​​p>

所需的防伪令牌未提供或无效。

如果我注释掉这一行:

System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = user;

防伪验证工作正常,但我没有方便的方法从 HttpContext 获取我的“EntityUser”。 关于如何解决这个问题的任何想法? 最好的祝福 迈克尔

【问题讨论】:

  • 我不认为这些是相关的,这让你的观察看起来很奇怪。我在应用程序中使用自定义主体和 AFT,它工作正常。
  • 但是如果我注释掉我设置 CurrentPrincipal 和 Current.user 的行,Antiforgery 验证工作。你用的是MVC2吗? (我忘了提到我正在使用 MVC2)。据我了解,MS 已经改变了 AntiForgeryToken 的实现。有关它的 SO 问题,请参见此处:stackoverflow.com/questions/2697772/…

标签: asp.net-mvc authentication asp.net-mvc-2 antiforgerytoken


【解决方案1】:

我不认为这些是相关的。当您将 [ValidateAntiForgeryToken] 属性添加到控制器操作时,您还需要在表单中添加隐藏字段:

<%= Html.AntiForgeryToken() %>

如果您通过 AJAX 提交,则始终需要随请求发送此令牌。

【讨论】:

    【解决方案2】:

    实际上 AntiForgeryToken 使用 HttpContextBase.User 进行验证。请参阅 AntiForgeryWorker.Validate

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 2013-11-27
      • 2014-01-23
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多