Предоставленный токен защиты от подделки был предназначен для пользователя "Имя пользователя", но текущий пользователь ""
Когда я вхожу с учетными данными пользователя, в первый раз без ошибок при входе в приложение,
но при выходе из системы и повторном входе с учетными данными другого пользователя произошла ошибка
Предоставленный токен защиты от подделки был предназначен для пользователя "Имя пользователя", но текущий пользователь "".
Я реализую AntiForgoryToken
а также IPrincipal
с asp.net mvc 5
Я старался:
AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;
в Application_Start()Я уже ссылался на эту ссылку. При попытке выхода из системы предоставленный токен защиты от подделки был предназначен для пользователя "XXXX", но текущий пользователь ""
Как я могу исправить эту ошибку?
Заранее спасибо.
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>
Вам на самом деле не нужно проверять токен анти-фальсификации на методе post вашего логина.
Токены защиты от подделки обеспечивают защиту от CSRF-атак. Атака CSRF происходит, когда вредоносный скрипт / ссылка публикует HTTP-запрос от вашего имени без вашего ведома или согласия. Когда токен защиты от подделки внедрен на вашей странице, сервер может проверить этот токен при получении запроса, чтобы убедиться, что запрос действительно пришел со страницы. Запрос от вредоносного скрипта или ссылки не будет иметь токена и завершится ошибкой.
Таким образом, все остальные действия, которые вы хотите защитить, должны быть украшены [Authorize]
а также[ValidateAntiForgeryToken]
атрибутов. Однако метод входа в систему не нуждается ни в одном из этих атрибутов.
Обновление: это действительно необходимо. Смотрите ответ в комментарии Стивена Мюке.