Подтвердить что ты не робот

Токен-маркер анти-подделки и маркер поля формы не совпадают с 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);
        }
4b9b3361

Ответ 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/

Ответ 3

убедитесь, что вы разместили @Html.AntiForgeryToken() в своей странице

Ответ 4

Еще одна причина для этой ошибки заключается в том, что вы прыгаете между областями [Authorize], которые не кэшируются браузером (это было бы сделано специально, чтобы заблокировать пользователей от просмотра защищенного контента, когда они выходят и используют обратную например).

В этом случае вы можете сделать свои действия не кэшированными, поэтому, если кто-то нажал кнопку "Назад" и попал в форму с помощью @Html.AntiForgeryToken(), токен не будет кэшироваться ранее.

См. это сообщение о том, как добавить [NoCache] ActionFilterAttribute: Как обрабатывать отправку формы Кнопка ASP.NET MVC Back?

Ответ 5

У меня была эта проблема в течение длительного времени и предполагалось, что с ASP.NET что-то не так.

В действительности, это был сервер. Тогда я был с WinHost, и у них есть ограничение на 200 МБ памяти. Как только у меня было ~ 20 пользователей одновременно, мой лимит был достигнут. На этом этапе все вышли из системы и дали эти проблемы.

Ответ 6

Для меня это было вызвано отправкой формы с помощью тега кнопки. Изменение этого параметра на тег отправки сообщения устраняет проблему.