我有一个 mvc2 应用程序,它通过 iframe 提供内容。 iframed 页面只是一个表单。它有一个请求验证 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,但调试器仍然导致此错误。
我已将声明的机器 key 添加到 web.config 中。我不确定还可能是什么。仅当调试器运行且使用 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/