ValidateAntiForgeryTokenAttribute
'Представляет атрибут, который используется для обнаружения ли сервер запрос был подделан.
MSDN. То, что Html.AntiForgeryToken()
делает, выводит скрытое поле в форму, что-то вроде: <input name="__RequestVerificationToken" type="hidden" value="XXX" />
.
Что делает ValidateAntiForgeryTokenAttribute
в ответ на пост, сравнивает опубликованное значение с ранее сохраненным cookie, чтобы убедиться, что они совпадают. См. http://aspnet.codeplex.com/SourceControl/changeset/view/72551#338576 (метод OnAuthorization
) для деталей. Файл cookie имеет имя RequestVerificationToken_Lw (вы можете использовать инструмент для проверки файлов cookie, например FireCookie).
Хранилище файлов cookie - это куки-файл сеанса (важный бит). Это означает, что когда ваш тайм-аут авторизации достигнут (по умолчанию 30 минут по умолчанию в .NET), cookie истекает, он не отправляется со следующим запросом и не сравнивается с скрытым значением поля, бросая HttpAntiForgeryException
.
Спасибо за ответ ... Я не совсем уверен, как это исправить. В принципе, я хочу, чтобы атрибут выполнялся перед и перенаправлял пользователя на мою страницу входа. Любая идея, как это сделать? –
stub
Атрибуты фильтра действий выполняются в том порядке, в котором они были добавлены, поэтому, если вы добавите Авторизовать перед ValidateAntiForgeryToken, тогда он будет работать. В качестве альтернативы вы можете изменить свойство Order для изменения заказа. –