У нас есть веб-сайт, который использует MVC3 и пользовательский метод проверки подлинности, который вообще не полагается на проверку подлинности с помощью форм - по крайней мере из того, что я могу сказать. В web.config мы устанавливаем
<authentication mode="None"></authentication>
и мы никогда не используем / не устанавливаем HttpContext.User где-либо в коде. Проблема в том, что при использовании @ Html.AntiForgeryToken () в некоторых случаях пользователь получает следующее сообщение об ошибке:
A required anti-forgery token was not supplied or was invalid
Мы централизуем все проверки на подделку в OnAuthorization с помощью этого кода:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
Вот где происходит исключение. Мы определили machineKey в web.config , чтобы предотвратить генерацию новых ключей при перезагрузке пула приложений. Это не решило проблему.
Затем мы подумали, что, возможно, браузер клиента не отправляет куки. Мы начали регистрировать cookie-файлы и заметили, что в некоторых случаях cookie-файл RequestVerificationToken_Lw отправляется, а в других - нет, хотя другие cookie-файлы, например, созданные Google Analytics, отправляются очень хорошо. Может быть, что-то в браузере удаляет некоторые куки и оставляет другие в?
Похоже, что токен защиты от подделки зависит от аутентификации форм . Это тот случай? Любой способ продолжать использовать AntiForgeryToken, когда не используется надежная проверка подлинности с помощью форм. Помните, что метод, который я описал выше, работает более чем в 90% случаев, но мы не можем точно определить, почему он не работает для некоторых людей.
Мысли
Спасибо!