我们正在尝试在MVC4中的控制器中的一个操作方法中阻止跨站点请求伪造攻击。以下是我们在VS 2013中正常运行的代码更改,但在VS 2012中引发了错误,并且在Windows Server 2012-IIS 8中部署时出现了同样的错误。
View.cshtml
@using(Html.Beginform())
{@Html.antiforgerytoken()}
Controller.cs
[ValidateAntiforgeryToken]
public ActionResult actionmethod1()
{
<some code here>
}
VS2013-以上代码正常
VS2012-抛出以下错误
提供的ClaimsIdentity中没有“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”或“http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明。要使用基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsIdentity实例上提供这两个声明。如果配置的声明提供程序使用不同的声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig.UniqueClaimTypeIdentifier来配置它。
当在Windows Server 2012 IIS8中部署使用VS2013的已发布代码时,我们收到上述错误
1. VS2013有什么区别让它起作用,这在VS2012中无效? 2.我们应该在IIS中做些什么改变才能使代码像在VS2013中一样工作?
答案 0 :(得分:1)
在Application_Start
方法中添加此行:
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;