ValidateAntiForgeryToken и Авторизовать тайм-аут - PullRequest
2 голосов
/ 16 января 2012

У меня есть ActionResult, украшенный ValidateAntiForgeryToken и Authorize.По истечении лимита времени для авторизации форм я получаю сообщение " Требуемый токен защиты от подделки не был предоставлен или был недействительным " вместо того, чтобы быть перенаправленным на мою страницу входа.

Может кто-нибудь объяснить, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 16 января 2012

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 является файлом cookie сеанса (важныйнемного).Это означает, что по истечении времени ожидания авторизации (по умолчанию 30 минут в .NET) срок действия файла cookie истекает, он не отправляется со следующим запросом, и сравнение со значением скрытого поля завершается неудачно, что приводит к HttpAntiForgeryException. * 1025.*

0 голосов
/ 16 января 2012

Обязательно используйте @ Html.AntiForgeryToken () с в BeginForm () {....} в представлении

 @using(Html.BeginForm()){
       @Html.AntiForgeryToken()
     .
     .
     .
     .
    }

Тогда это будет проверено в атрибуте фильтра действий [ValidateAntiForgeryToken]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...