HttpContext.Current.User не заполнен с включенной аутентификацией Windows - PullRequest
3 голосов
/ 01 августа 2009

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

    <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, упомянутые выше, но, видимо, я что-то делаю не так. Кто-нибудь еще сталкивался с подобной проблемой или видел что-то, что я делаю неправильно? Спасибо.

Ответы [ 6 ]

3 голосов
/ 10 августа 2009

Убедитесь, что ваш <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.

3 голосов
/ 01 августа 2009

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

1 голос
/ 05 августа 2009

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

А вот и пост в блоге Хансельмана , в который пришла другая сумасшедшая идея:

0 голосов
/ 09 августа 2009

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

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

0 голосов
/ 08 августа 2009

Вы пытались добавить олицетворение личности :

<identity impersonate="true" />

в web.config?

0 голосов
/ 05 августа 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...