验证防伪的问题

时间:2010-05-14 15:18:51

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

我遇到有关MVC Anti伪造令牌的问题。 当我进行身份验证时,我有这样的伪代码:

var user = userRepository.GetByEmail(email);
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User = user;
通过这样做,我能够在我的代码中获得当前用户:

var user = HttpContext.Current.User as EntityUser;

这一点很好,直到我将[ValidateAntiForgeryToken]属性添加到一个动作。 当我添加属性时我得到了

  

未提供所需的防伪标记或无效。

如果我注释掉这一行:

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

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

2 个答案:

答案 0 :(得分:3)

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

<%= Html.AntiForgeryToken() %>

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

答案 1 :(得分:0)

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