Токен-маркер анти-подделки и маркер поля формы не совпадают с MVC 4
Я использую модуль входа по умолчанию в ASP.NET MVC 4. Я не изменял код в приложении по умолчанию, и я размещал его на общем сервере.
После того, как я вошел в систему, используя страницу входа по умолчанию. Я долгое время оставался браузером. Тогда, очевидно, приложение перенаправлено на страницу входа, когда я пытаюсь выполнить любое действие с помощью атрибута [Authorize]
.
Затем я снова пытаюсь войти в систему, и он дает ошибку, когда я нажимаю кнопку входа в систему.
The anti-forgery cookie token and form field token do not match.
![enter image description here]()
Действие входа в систему
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
Ответы
Ответ 1
Я решил проблему, явно добавив машинный ключ в web.config.
Примечание. По соображениям безопасности не используйте этот ключ. Создайте один из https://support.microsoft.com/en-us/kb/2915218#AppendixA. Не используйте он-лайн, детали, http://blogs.msdn.com/b/webdev/archive/2014/05/07/asp-net-4-5-2-and-enableviewstatemac.aspx
<machineKey validationKey="971E32D270A381E2B5954ECB4762CE401D0DF1608CAC303D527FA3DB5D70FA77667B8CF3153CE1F17C3FAF7839733A77E44000B3D8229E6E58D0C954AC2E796B" decryptionKey="1D5375942DA2B2C949798F272D3026421DDBD231757CA12C794E68E9F8CECA71" validation="SHA1" decryption="AES" />
Здесь сайт, который генерирует уникальные ключи машины:
http://www.developerfusion.com/tools/generatemachinekey/
Ответ 2
Здесь сайт, который генерирует уникальные ключи Machnie http://www.developerfusion.com/tools/generatemachinekey/
Ответ 3
убедитесь, что вы разместили @Html.AntiForgeryToken() в своей странице
Ответ 4
Еще одна причина для этой ошибки заключается в том, что вы прыгаете между областями [Authorize], которые не кэшируются браузером (это было бы сделано специально, чтобы заблокировать пользователей от просмотра защищенного контента, когда они выходят и используют обратную например).
В этом случае вы можете сделать свои действия не кэшированными, поэтому, если кто-то нажал кнопку "Назад" и попал в форму с помощью @Html.AntiForgeryToken(), токен не будет кэшироваться ранее.
См. это сообщение о том, как добавить [NoCache] ActionFilterAttribute:
Как обрабатывать отправку формы Кнопка ASP.NET MVC Back?
Ответ 5
У меня была эта проблема в течение длительного времени и предполагалось, что с ASP.NET что-то не так.
В действительности, это был сервер. Тогда я был с WinHost, и у них есть ограничение на 200 МБ памяти. Как только у меня было ~ 20 пользователей одновременно, мой лимит был достигнут. На этом этапе все вышли из системы и дали эти проблемы.
Ответ 6
Для меня это было вызвано отправкой формы с помощью тега кнопки. Изменение этого параметра на тег отправки сообщения устраняет проблему.