Asp.net mvc 3 WSFederationAuthenticationModule.IsSignInResponse中的潜在危险请求.Form
在我的MVC3站点中,我避免使用新的ValidateInput属性设置requestValidationMode=“2.0”,但现在我尝试切换到WIF进行身份验证,当STS重定向回我的站点时,我得到异常是因为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”(我真的不想这么做)就解决这
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>