Исключение токена Antiforgery только при запуске отладчика - PullRequest
4 голосов
/ 14 марта 2011

У меня есть приложение mvc2, которое обслуживает контент через iframes.Страница 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.

1 Ответ

4 голосов
/ 08 апреля 2011

Я нашел ответ. Мой контент был представлен через междоменный iframe. В соответствии с Адамом Янгом , IE будет автоматически блокировать сторонние куки, если вы не определите политику 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\"");
}

Я также определил машинный ключ , хотя я не уверен, что это было необходимо.

...