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