Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 WSFederationAuthenticationModule.IsSignInResponse中的潜在危险请求.Form_Asp.net Mvc 3_Wif - Fatal编程技术网

Asp.net mvc 3 WSFederationAuthenticationModule.IsSignInResponse中的潜在危险请求.Form

Asp.net mvc 3 WSFederationAuthenticationModule.IsSignInResponse中的潜在危险请求.Form,asp.net-mvc-3,wif,Asp.net Mvc 3,Wif,在我的MVC3站点中,我避免使用新的ValidateInput属性设置requestValidationMode=“2.0”,但现在我尝试切换到WIF进行身份验证,当STS重定向回我的站点时,我得到异常是因为WSFederationAuthenticationModule.IsSignInResponse正在调用Request.Form而不是Request.Unvalidated().Form。。。有没有办法不用去requestValidationMode=“2.0”(我真的不想这么做)就解决这

在我的MVC3站点中,我避免使用新的ValidateInput属性设置requestValidationMode=“2.0”,但现在我尝试切换到WIF进行身份验证,当STS重定向回我的站点时,我得到异常是因为
WSFederationAuthenticationModule.IsSignInResponse
正在调用
Request.Form
而不是
Request.Unvalidated().Form
。。。有没有办法不用去requestValidationMode=“2.0”(我真的不想这么做)就解决这个问题

这是堆栈跟踪,所以你可以明白我的意思。我的控制器的方法从未真正被调用过

[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

[HttpRequestValidationException(0x80004005):一个潜在危险的请求。从客户端检测到表单值(wresult=“我想我们在某些时候也观察到了相同的错误,但如果我没记错的话,那是在一些实验性或测试性的脚手架代码中,因此我们没有严格的安全要求

我可以找到的官方信息是,这是WIF中的一个已知问题:请参阅开头的“ASP.NET将被动联盟令牌检测为潜在安全攻击”部分。他们说要设置
validateRequest=“false”“
web.config
中的
,或在页面级别执行此操作的等效ASP.NET
页面
指令

因此,您可以尝试仅在应用程序“主页”上的
Page
指令中设置此选项,我不确定,但这可能有效


请注意,他们没有在WIF已知问题页面上讨论
requestValidationMode=“2.0”
,但从这个附加设置来看,ASP.NET 4是必要的。

正确的处理方法是向HttpRuntime添加特定的验证器,它知道如何检测有效的安全令牌

请看以下示例:

下面是其中一个应用程序的摘录(示例#5不具体,这也是一个MVC应用程序):

以下是配置:

<system.web> 
...   
   <httpRuntime requestValidationType="FShipping.WsFederationRequestValidator" />
</system.web>

...   

嘿,谢谢你提供了已知问题的链接——看起来WIF只是不适合MVC3,而且没有访问验证的权限。未验证(如果没有人能真正为我解决问题,我会将此标记为答案,但这让我非常难过)@Euginio:谢谢你,这些信息显然已经被添加到了。这会很快出现在官方文档中吗?别提这一点。至少WIF已知问题页面的更新看起来是有序的。这看起来比我提出的更干净的解决方案,即将验证设置为2.0,并使用类似的代码to Global.asax.cs应用程序_BeginRequest调用Request.ValidateInput()中的代码片段,但在所有情况下,登录回发除外。@Marnix:claims identity book的第一版可从以下位置免费下载:CodePlex上的内容(claimsid.CodePlex.com)都是第二版的草稿,将在未来几个月内发布。很高兴知道它运行良好!我将ping WIF人员,以便他们更新他们的文档。我也有这个问题,但这些都无法解决。这在过去六个月内是否发生了变化?我的自定义验证程序没有被调用。有办法解决这个问题吗?您要知道,验证器没有以二进制形式提供而不是作为示例提供,这真是太遗憾了-/
<system.web> 
...   
   <httpRuntime requestValidationType="FShipping.WsFederationRequestValidator" />
</system.web>