0

我有关于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; 

的防伪验证工作正常,但我没有让我的“EntityUser”从HttpContext的我的便捷方式。 有关如何解决此问题的任何想法? 致以问候 Mikael

+0

我不认为这些是相关的,这会使您的观察看起来很奇怪。我在应用程序中使用自定义校长和AFT,并且工作正常。 – Will 2010-05-14 15:22:55

+0

但是,如果我注释掉设置CurrentPrincipal和Current.user的行,Antiforgery验证将起作用。 你使用MVC2吗? (Iforgot提到我使用MVC2)。据我了解,MS已经改变了AntiForgeryToken的实施。 在这里看到一个关于它的SO问题:http://stackoverflow.com/questions/2697772/mvc-2-antiforgerytoken-why-symmetric-encryption-iprinciple – 2010-05-15 20:35:07

回答

3

我不认为那些是相关的。当您添加[ValidateAntiForgeryToken]属性的控制器动作,您还需要添加表单里面的隐藏字段:

<%= Html.AntiForgeryToken() %> 

如果您是通过AJAX提交它,你总是需要沿着发送请求此令牌。

0

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