Ale*_*gas 21 azure wif acs asp.net-mvc-3
我使用"Internet应用程序"模板创建了一个新的ASP.NET MVC 3/.NET Framework 4.0站点.我使用Nuget安装Windows Azure Web角色(MVC3)包,然后按照访问控制服务演练设置Windows Live ID和Google身份验证.
很快,我遇到了"从客户端检测到一个潜在危险的Request.Form值"错误,并按照Windows Identity Foundation wiki中的文章尝试解决它.不幸的是,我尝试过的一切都没有,包括:
设置<httpRuntime requestValidationMode="2.0"/>并<pages validateRequest="false">在根web.config和Views\web.config中
SampleRequestValidator从WIF SDK 复制到项目并<httpRuntime requestValidationType="SampleRequestValidator"/>在web.configs中进行设置
我也试过这些变种而没有成功.
有任何想法吗?
这是完整的例外:
异常详细信息: System.Web.HttpRequestValidationException:从客户端检测到潜在危险的Request.Form值(wresult =" <t:RequestSecurityTo...").
说明:请求验证已检测到潜在危险的客户端输入值,并且请求的处理已中止.此值可能表示尝试破坏应用程序的安全性,例如跨站点脚本攻击.要允许页面覆盖应用程序请求验证设置,请将httpRuntime配置部分中的requestValidationMode属性设置为requestValidationMode ="2.0".示例:<httpRuntime requestValidationMode="2.0" />.设置此值后,您可以通过在Page指令或<pages>配置部分中设置validateRequest ="false"来禁用请求验证.但是,强烈建议您的应用程序在这种情况下明确检查所有输入.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=153133.
堆栈跟踪:
[HttpRequestValidationException(0x80004005):从客户端检测到一个潜在危险的Request.Form值(wresult =" <t:RequestSecurityTo...").
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) +75 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +205 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request) +41 Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +117 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
Dar*_*rov 18
您可以尝试使用[ValidateInput(false)]属性(通过离开)来装饰要发布到的控制器操作(以及抛出此异常<httpRuntime requestValidationMode="2.0"/>的操作web.config).
小智 16
我有同样的问题.
以下是我的解决方案示例:
[ValidateInput(false)]
public ActionResult *YourMethodName*(FormCollection forms)
{
// Encoded String
string EncodedValue = Server.HtmlEncode(forms[*name or index*]);
// Normal String
string value = forms[*name or index*]
//....
}
Run Code Online (Sandbox Code Playgroud)
您的webconfig中不需要任何内容.
Eri*_*oen 13
我在这里写了一篇关于此的小博客说明:http://erikbra.wordpress.com/2012/04/17/wif-saml-token-post-and-requestvalidationmode2-0/.无需关闭请求验证,也无需为整个站点将其设置为2.0.
简而言之,您只需要requestValidationMode在WIF回发SAML令牌的特定URL上更改为2.0模式.这可以通过web.config中的元素(请参阅位置元素(ASP.NET设置架构)获取详细信息)来完成,如下所示:
<location path="WIFHandler">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
该"WIFHandler"位置并不需要在应用中存在,因为WIF将快捷管道ASP.NET试图处理请求之前,和您重定向到返回URL(ru在wctxSAML令牌POST的参数)来代替.
在web.config文件的WIF配置部分中,确保将"reply"参数与您将请求验证模式设置为2.0模式的位置相匹配:
<microsoft.identityModel>
<service>
<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true"
issuer="https://localhost/STS/"
realm="https://localhost/MyApp/"
reply="https://localhost/MyApp/WIFHandler/" />
(...)
Run Code Online (Sandbox Code Playgroud)
Ale*_*gas -1
我无法找到这不起作用的技术原因。然而,从业务需求的角度来看,这是我的特定解决方案所基于的错误示例,因为它会在访问任何页面之前提示进行身份验证。然而,对主页的访问需要匿名,因此可以使用“登录”按钮。
相反,我找到了满足这些要求并且有效的MVC3 自定义登录示例。
| 归档时间: |
|
| 查看次数: |
46077 次 |
| 最近记录: |