在我的MVC3網站,我已經避免使用新的ValidateInput屬性設置requestValidationMode =「2.0」,但現在我試圖切換到WIF進行身份驗證,並且當STS重定向回到我的網站,我得到的例外,因爲WSFederationAuthenticationModule.IsSignInResponse
調用Request.Form
,而不是Request.Unvalidated().Form
...有沒有辦法處理這個,而不會去requestValidationMode =「2.0」(我真的不想這樣做)。WSFederationAuthenticationModule.IsSignInResponse中潛在危險的Request.Form
這裏是堆棧跟蹤,所以你可以看到我的意思。我的控制器的方法從來沒有真正被調用。
[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (wresult="<trust:RequestSecuri...").]
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8755668
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
System.Web.HttpRequest.get_Form() +114
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +21
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +121
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +78
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
@Euginio:謝謝你,這些信息顯然是在[2010年8月2日發佈的「索賠身份指南」一書中](http://claimsid.codeplex.com/releases/view/50000)中添加的。這會在不久的將來成爲官方文檔嗎? [MSDN](http://www.google.com/search?q=%2BWIF+%2BRequestValidator+site%3Amsdn.microsoft.com+-site%3Asocial.msdn.microsoft.com)和[TechNet](http:// www.google.com/search?q=%2BWIF+%2BRequestValidator+site%3Atechnet.microsoft.com+-site%3Asocial.technet.microsoft.com)完全沒有提到這一點。 WIF已知問題頁面的更新似乎至少是按順序進行的。 – 2011-03-27 05:55:29
這看起來像比我想出的更清潔的解決方案,即將驗證設置爲2.0,並在Global.asax.cs中的Application_BeginRequest代碼中使用類似的代碼在除登錄回發之外的所有情況下調用Request.ValidateInput() 。 – Jaykul 2011-03-27 17:14:06
而且,它的工作;-) – Jaykul 2011-03-27 17:24:49