Выход из приложения MVC4

Я продолжаю чью-то разработку, И я мало знаю о текущих методах аутентификации в приложениях MVC.

Единственное, что настроено для аутентификации, находится в конфигурации IIS приложения:

  • Правила аутентификации .NET = Разрешить, Все пользователи

Аутентификация:

  • Анонимная аутентификация: включена
  • Олицетворение ASP .NET: отключено
  • Аутентификация Windows: включена

При такой конфигурации на сервере браузер запрашивает у меня логин/пароль. Ввожу свой сетевой логин. Затем я могу идентифицировать пользователя с помощью Request.RequestContext.HttpContext.User.Identity...

На локальном компьютере, где я вхожу с тем же логином/паролем: ни один пользователь не зарегистрирован в приложении (Request.RequestContext.HttpContext.User.Identity.Name == ""). Если я отключу анонимную аутентификацию, браузер просто будет бесконечно повторно запрашивать логин-пароль.

Моя первая проблема заключается в том, что я хотел бы иметь возможность выйти из системы на сервере. Из скудной информации, которую я получил здесь и там, я уже пробовал: FormsAuthentication.SignOut(); --> ничего не делает WebMatrix.WebData.WebSecurity.Logout(); --> Исключение, пытается получить доступ к базе данных (я получил это из одного из шаблонов VS2012, но я не думал, что это применимо к мой контекст). if(this.Request.RequestContext.HttpContext.Session != null) this.Request.RequestContext.HttpContext.Session.Clear(); --> Сеанс нулевой, поэтому ничего не делает.

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

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


person TTT    schedule 24.01.2014    source источник


Ответы (1)


Удален метод выхода из системы FormsAuth, так как вопрос касается аутентификации Windows... дох!

Обновление:

Чтобы получить имя пользователя, вошедшего в систему, попробуйте IPrincipal Controller.User:

User.Identity.Name

Плохо, что ты используешь аутентификацию Windows...

В этом случае учетные данные кэшируются браузером, а не сервером/IIS, поэтому очистка сеанса ничего не даст.

Взято с здесь:

«Учетные данные пользователя кэшируются браузером клиента, а не IIS. Чтобы заставить пользователя клиента снова ввести учетные данные, вам потребуется отправить соответствующее сообщение о состоянии 401 в ответ на следующий запрос клиента. Однако это приведет к запуску противоречит очень законным ожиданиям пользователей относительно того, как должна работать проверка подлинности Windows, поэтому вы можете пересмотреть свое решение.Если учетные данные пользователя Windows уже приняты сервером (либо через диалоговое окно входа, либо через автоматическую отправку в конфигурации IE для целевого сайта или zone), ошибка 401 ожидается только в том случае, если к запрошенному ресурсу невозможно получить доступ с использованием ранее предоставленных учетных данных. Когда вы отправляете ошибку 401 после того, как какие-либо учетные данные были ранее приняты, пользователь должен ожидать, что ему потребуется использовать другие учетные данные, отличные от их первоначального входа в систему. Если вы ожидаете одинаковые учетные данные, следует ожидать путаницы пользователей.

В общем, если вы действительно хотите принудительно выполнить новый вход в систему, возможно, более подходящим будет другой режим аутентификации».

Обходной путь только для IE см. в этой публикации SO.

person Paul Zahra    schedule 24.01.2014
comment
Спасибо за ваш ответ, но если вы прочитаете мой пост, вы увидите, что я уже пробовал оба (по отдельности и вместе). - person TTT; 24.01.2014
comment
@TTT Действительно, но вы использовали их оба вместе? - Обычно в MVC с аутентификацией форм вы должны выйти из системы, как описано выше. - person Paul Zahra; 24.01.2014
comment
Как упоминалось в моем предыдущем комментарии, я пробовал отдельно И пробовал оба вместе). - person TTT; 24.01.2014