我有一个 mvc2 应用程序,它通过 iframes 提供内容。 iframe 页面只是一个表单。它有一个请求验证 token 。在开发人员使用 Visual Studio 2005 调试器之前,跨域一切正常。一旦他们这样做,我就会收到以下错误详细信息。
Exception:
System.Web.Mvc.HttpAntiForgeryException : A required anti-forgery token was not supplied or was invalid.
Stack Trace:
at System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)
at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
Source:
System.Web.Mvc
Location:
Void OnAuthorization(System.Web.Mvc.AuthorizationContext)
Url:
https://mydomain.com/Portal/Framed/NewQuickPay/yFkYAA!!-OSlvtw!!-4f560479-96f2-4578-8804-a757d4913f52
Path:
D:\Inetpub\wwwroot\Portal\
Referrer:
https://mydomain.com/portal/Framed/Index/yFkYAA!!-OSlvtw!!-4f560479-96f2-4578-8804-a757d4913f52/?amount=2861.43
Server Name:
/* OMITTED */
IP Address:
/* OMITTED */
User Agent:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET CLR 1.1.4322)
Is Authenticated:
False
Http Method:
POST
Form Data
/* OMITTED */
__RequestVerificationToken EoJfaqoiWFUnbJFIQQeXoCeUdtVKpfX7RB0LfUXoTzRbrwK3ZYr6ZjT2ldsNGqVuB+3Vtc3uiRZoJiF+VAi7v7kdEy/sCb6jI9stzTzz/hRh3emTzBh61W9+GkFlEkxEVID8Bg==
Cookies
/* NONE */
我们已经删除了所有 cookie,重新启动了机器,重新启动了 Visual Studio,但调试器仍然导致此错误。
我已经向 web.config 添加了一个声明的机器 key 。我不确定它还能是什么。它仅在调试器运行时发生,并且他们使用的是 Visual Studio 2005。
最佳答案
我找到了答案。我的内容是通过跨域 iframe 呈现的。根据 Adam Young ,除非您在 header 中定义 P3P 策略,否则 IE 将自动阻止第三方 cookie。
我添加了代码以将 p3p 策略注入(inject)到 header 中,并从我在 iframe 中使用的每个操作中调用它。到目前为止,我们还没有看到这个错误出现。我希望这个解决方案可以帮助别人。
public static void SetP3PCompactPolicy()
{
HttpContext.Current.Response.AddHeader("p3p",
"CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}
我还定义了一个 machine key ,虽然我不确定这是必要的。
关于asp.net-mvc-2 - 仅在运行调试器时防伪 token 异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5304056/