加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 仅在运行调试器时出现Antiforgery令牌异常

发布时间:2020-12-16 09:59:49 所属栏目:asp.Net 来源:网络整理
导读:我有一个mvc2应用程序,它通过iframe提供内容. iframed页面只是一个表单.它有一个请求验证令牌.在开发人员使用Visual Studio 2005调试器之前,所有内容都能跨域运行.一旦他们这样做,我会得到以下错误详细信息. Exception: System.Web.Mvc.HttpAntiForgeryExcep
我有一个mvc2应用程序,它通过iframe提供内容. 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:InetpubwwwrootPortal

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.

解决方法

我找到了答案.我的内容是通过跨域iframe呈现的.根据 Adam Young,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"");
}

我也定义了machine key,虽然我不确定是否有必要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读