Предоставленный токен защиты от подделки предназначался для пользователя UserName, но текущий пользователь

Когда я вхожу в систему с учетными данными пользователя, в первый раз при входе в приложение не возникает ошибок,

но когда я выхожу из системы и снова вхожу в систему с учетными данными другого пользователя, возникает ошибка

Предоставленный токен защиты от подделки предназначался для пользователя «UserName», но текущий пользователь — «».

Я реализую AntiForgoryToken и IPrincipal с asp.net mvc 5

Я старался :

  1. AntiForgeryConfig.SuppressIdentityHeuristicChecks = true; в Application_Start()

  2. Я уже ссылался на эту ссылку Когда попытка выхода из системы. Предоставленный маркер защиты от подделки предназначался для пользователя XXXX, но текущий пользователь

Как я могу исправить эту ошибку?

Заранее спасибо.


person gaurav bhavsar    schedule 14.12.2015    source источник
comment
Добавляете ли вы атрибут [ValidateAntiForgeryToken] в действие входа? Если это так, попробуйте удалить его.   -  person OJ Raqueño    schedule 15.12.2015
comment
Да, я добавил [ValodateAntiForgeryToken] в метод входа в систему post, но не в метод get, который возвращает только страницу входа.   -  person gaurav bhavsar    schedule 15.12.2015


Ответы (2)


Я обнаружил, что в моем экземпляре IIS включена как анонимная, так и Windows-аутентификация, что вызывало это исключение для моего приложения.

Оба параметра аутентификации включены

Этот параметр, по-видимому, является причиной этого исключения. Похоже, что фильтр действия ValidateAntiForgeryToken использовал текущего пользователя, заполненного пустой строкой в ​​аутентификации Anon, а затем пытался сопоставить его с токеном, который был заполнен с помощью аутентификации Win.

Отключив аутентификацию Windows или Anonymous (для моего приложения я отключил аутентификацию Anon), токены теперь совпадают.

Настройки аутентификации включены

Этот параметр можно изменить в диспетчере IIS или в файле web.config следующим образом.

<system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="false" />
        <windowsAuthentication enabled="true" />
      </authentication>
    </security>
</system.webServer>
person user2491905    schedule 14.04.2016
comment
Спасибо за ответ, попробую это :). - person gaurav bhavsar; 14.04.2016

На самом деле вам не нужно проверять токен защиты от подделки в методе post вашего входа в систему.

Токены Antiforgery обеспечивают защиту от CSRF-атак. Атака CSRF происходит, когда вредоносный скрипт/ссылка отправляет HTTP-запрос от вашего имени без вашего ведома или согласия. Когда токен защиты от подделки встроен в вашу страницу, сервер может проверить этот токен при получении запроса, чтобы убедиться, что запрос действительно пришел со страницы. Запрос от вредоносного скрипта или ссылки не будет иметь токена и завершится ошибкой.

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

Обновление: это действительно необходимо. См. ответ в комментарии Стивена Мюке.

person OJ Raqueño    schedule 18.12.2015
comment
Интересно !! Итак, как защитить логин и учетные данные пользователя как security.stackexchange.com/questions/2120/ - person gaurav bhavsar; 18.12.2015
comment
Вам определенно нужен токен для метода входа в систему, и я предлагаю вам прочитать этот ответ - person ; 17.01.2016