HttpContext.Current.User имеет значение null, даже если включена проверка подлинности Windows - PullRequest
19 голосов
/ 02 ноября 2009

В IIS7 под Windows Server 2008 у меня есть виртуальный каталог с отключенным анонимным доступом и включенной аутентификацией Windows. В моем web.config у меня есть:

<authentication mode="Windows"/>
<authorization>
            <allow roles="MYGROUP"/>
            <deny users="*"/>
</authorization>

и

<system.webServer>
    <!-- IIS7 security settings -->
    <security>
        <authorization>
                <add accessType="Deny" users="*"/>
                <add accessType="Allow" roles="MYGROUP"/>
        </authorization>
    </security>
</system.webServer>

Тем не менее, когда я получаю доступ к default.aspx из IE и устанавливаю точку останова в Global.asax.vb Application_AuthenticateRequest (), я получаю нулевое значение HttpContext.Current.User, где я ожидаю свою собственную идентификацию. Это почти как если бы Анонимный доступ был включен?

Что я могу сделать, чтобы устранить эту проблему? Кажется, все работает в IIS6.

Ответы [ 4 ]

25 голосов
/ 03 июля 2012

Ответ на перевод Прикладного пула обратно в классическое просто откладывает проблему.

Вместо этого оставьте пул приложений в покое и переместите проверку подлинности с Application_AuthenticateRequest() на следующую функцию в конвейере:

Application_AuthorizeRequest(object sender, EventArgs e)

К тому времени интегрированный Пул приложений завершил проверку подлинности Windows, что позволит вам не получать null от HttpContext.Current.User.

Трубопровод можно найти здесь (ссылка предоставлена ​​CarlosAg).

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

2 голосов
/ 02 ноября 2009

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

* Внимание, это всего лишь объяснение и пример. Возможно, вы захотите использовать встроенную аутентификацию и сделать что-то другое.

1 голос
/ 08 мая 2013

В IIS 7 и asp.net 4.0 пользователь все еще был null в пределах Application_AuthenticateRequest () (отправитель объекта, EventArgs e) . Мне пришлось поместить всю логику аутентификации в Application_PostAuthenticateRequest () (отправитель объекта, EventArgs e). Вы можете увидеть пример здесь context-user-is-null-in-application-authenticaterequest-via -windows-Auth-в-аспида

1 голос
/ 06 июля 2010

Анонимный доступ должен быть включен, если вы не используете ssl или что-то другое для вашей собственной безопасности.

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