我有一个通过iframe提供内容的mvc2应用。 iframed页面只是一个表单。它有一个请求验证令牌。在开发人员使用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中。我不确定它还能是什么。它仅在调试器运行时发生,并且它们使用的是Visual Studio 2005。
答案 0 :(得分:4)
我找到了答案。我的内容是通过跨域iframe呈现的。根据{{3}},IE将自动阻止第三方cookie,除非您在标题中定义了P3P策略。
我添加了代码以将p3p策略注入标头,并从我在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\"");
}
我还定义了一个Adam Young,虽然我不确定这是否必要。