2014-01-24 3 views
1

Я продолжаю чужую разработку. Я мало знаю о текущей практике аутентификации в приложениях MVC.Выход из приложения MVC4

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

  • .NET Правила Authrization = Разрешить Все пользователи

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

  • Анонимная проверка подлинности : Enabled
  • ASP.NET олицетворение: отключено
  • проверка подлинности Windows: Enabled

При такой конфигурации на сервере, браузер просит у меня логин/пароль. Я вхожу в мой сетевой логин. Тогда я могу идентифицировать пользователя с помощью 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(); -> Сессия имеет значение null, поэтому ничего не делает.

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

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

ответ

0

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

Update:

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

User.Identity.Name 

Doh мой плохой вашей помощью проверки подлинности Windows ...

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

Взятые из here:

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

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

Для ИЭ только обходной путь см this SO post.

+0

Спасибо за ответ но если вы прочтете мой пост, вы увидите, что я попробовал оба (отдельно и вместе). – TTT

+0

@TTT Действительно, вы оба использовали их вместе? - Как правило, в MVC с проверкой подлинности форм вы должны выйти из системы согласно вышеописанному методу –

+0

Как упоминалось в моем предыдущем комментарии, я пробовал отдельно И Я пробовал оба вместе). – TTT

Смежные вопросы