2013-05-21 2 views
1

У меня есть приложение MVC 3, которое должно использоваться как для анонимных, так и для аутентифицированных пользователей.Как заставить приложение MVC заполнять значение User.Identity.Name при использовании проверки подлинности Windows

Это достигается путем настройки режима аутентификации IIS, чтобы активировать аутентификацию анонимного пользователя и Windows, а затем установить для параметра проверки подлинности режим web.config значение «Windows» и выборочно применять специальный атрибут авторизации к действиям, требующим проверки подлинности.

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

Приложение ведет себя непредсказуемо, в некоторых случаях, как только пользователь был аутентифицирован в предыдущем действии, тогда свойство User.Identity.Name остается доступным для остальной части сеанса пользователя. Однако в других случаях это выглядит как пустая строка.

Итак, как я могу на самом деле сказать приложению, чтобы «пойти и подтвердить подлинность этого пользователя»? Если атрибут Authorize может принудительно аутентифицировать пользователя, то как я могу достичь такого же эффекта по запросу в рамках действия?

спасибо вам помочь,

M

ответ

0

Если атрибут Авторизоваться может заставить аутентификацию пользователя, то, как можно достичь этого же влияние на спрос в действии?

Поступая таким же, как AuthorizeAttribute делает:

return new HttpUnauthorizedResult(); 
+0

Спасибо Дарина. Тем не менее, я не хочу отклонять пользователя как не прошедший проверку, но я хочу, чтобы их имя было заполнено в User.Identity.Name, если они действительно аутентифицированы, если вы знаете, что я имею в виду. Что-то вроде, если username.startsWith («admin»), то User.Identity.Authenticate() ... Я просто не могу понять, что представляет собой настоящая команда или техника для этого. – FullOfQuestions

+0

Другими словами, какая строка AuthorizeAttribute фактически выполняет аутентификацию пользователя? – FullOfQuestions

+1

Это делается с помощью соответствующего обработчика проверки подлинности и происходит намного раньше в контексте выполнения, чем действие вашего контроллера. Это абсолютно ничего в авторизованном атрибуте. Например, если вы используете FormsAuthentication, это происходит в модуле FormsAuthentication намного раньше в конвейере выполнения. Этот модуль читает файл cookie проверки подлинности форм, расшифровывает его, извлекает имя пользователя и задает текущий главный. –