2009-07-31 2 views
3

У меня есть приложение asp.net intranet с использованием проверки подлинности Windows. Я создал приложение много лет назад с VS 2005, и бит проверки подлинности Windows работал отлично. Мой web.config имеет следующий (внутри конфигурации -> system.web элемент):HttpContext.Current.User не заполнен аутентификацией Windows включен

<authentication mode="Windows" /> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

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

Однако, когда я пытаюсь получить доступ к HttpContext.Current.User.Identity, объект имеет пустые строки для Name и AuthenticationType и Authenticated = false. Я подумал, что мне может понадобиться включить WindowsTokenRoleProvider после просмотра интерфейсов, и это ничего не изменило.

<roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false"> 
     <providers> 
      <clear/> 
      <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/> 
     </providers> 
    </roleManager> 

Две вещи, которые я сделал, так как в последний раз я видел его работу является обновлением проекта в VS 2008 с помощью мастера преобразования, и я положил его в течение нескольких месяцев, в то время как мои сотрудники могут работали над этим здесь или там. Я был уверен, что единственное, что влияет на мой User.Identity, - это значения в упомянутом выше web.config, но, видимо, я делаю что-то неправильно. Кто-нибудь другой сталкивается с подобной проблемой или видит что-то, что я делаю неправильно? Благодарю.

+0

Вы протестировали его в IE? –

+0

Yep ... протестирован и в IE. Единственная причина, по которой я упомянул Firefox, - это то, что IE автоматически передает ваши учетные данные, тогда как FF заставляет вас вводить логин через подсказку. Вот как я знаю, что блокирую анонимный доступ, но я все еще получаю пустую информацию об User.Identity – Rich

+0

Когда вы говорите «когда я пытаюсь получить доступ к HttpContext.Current.User.Identity», в этот момент жизненного цикла страницы вы это делаете? – Bullines

ответ

2

Я считаю, что вам нужно убедиться, что анонимный доступ отключен в IIS для сайта/виртуального.

+0

У меня отключен анонимный доступ (непроверенный) и интегрированная проверка подлинности Windows, выбранная в IIS. – Rich

0

Некоторые идеи:

На конфигурации сайта, выдвижные диалоговое окно "параметров конфигурации ASP.NET. На вкладке «Аутентификация» установлен режим «Аутентификация» на «Windows»()? На вкладке «Приложение» было установлено «Локальное олицетворение» (я думаю, что он должен быть снят).

Был ли ваш сервер выгружен из домена? Изменен ли пользователь, запускающий пул приложений? Изменены ли политики домена, не позволяя серверу выдавать себя за пользователя в целях проверки подлинности (а не делегирования)?

Вы пытались переустановить расширения asp.net для своего сайта? (Это большая тема сама по себе.)

Вы можете программно определить флаг HttpContext.SkipAuthorization.

1

Попробуйте добавить, что вам нужно? Когда олицетворение не включено, много еще происходит под названием сетевых услуг или пользователя ASPNET

А вот Hanselman blog post, что имеет другую сумасшедшую идею, что пришло на ум:

0

Где вы желаете найти этого пользователя? В цикле запроса некоторые события запускаются до авторизации.

Если вы тестируете Vista, Windows 7 или Windows Server 2008, могут быть другие различия, поскольку конвейер ASP.Net и IIS интегрированы в конфигурацию по умолчанию IIS 7.

+0

Мне нужно войти в систему до того, как какой-либо код будет выполнен, поэтому мои учетные данные передаются. Мои проверки для пользователя были в Page_Load, и помните ... это работало нормально до недавнего времени. Это тестируется на моей машине разработки Vista, а также на двух разных серверах, работающих на сервере 2003. Спасибо. – Rich

3

Убедитесь, что раздел <httpModules> не удален. Файл web.config вашей машины должен включать в себя фрагмент кода, как это:

<httpModules> 
     <!-- ... --> 
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> 
     <!-- ... --> 
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" /> 
     <!-- ... --> 
    </httpModules> 

Важным элементом здесь является WindowsAuthentication. Убедитесь, что он находится в вашем файле %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config. Также убедитесь, что как ваш собственный веб-сайт, так и любой файл web.config, который отображается на «родительском» сайте или в папке сайта, не содержит тега <clear/> в разделе <httpModules>. Без модуля WindowsAuthentication не имеет значения, заставит ли браузер зайти в систему или нет ... ASP.NET никогда не будет устанавливать свойство User без включения этого модуля.

Упорядочение httpModules также является значительным, и, в частности, я считаю, что WindowsAuthentication модуль должен появиться перед темAnonymousIdentification один.

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