HttpContext.Current.User имеет значение null, даже если включена проверка подлинности Windows

В 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 ответа

Решение

Ответ на возвращение пула приложений обратно к классическому - просто отсрочивает проблему.

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

Application_AuthorizeRequest(object sender, EventArgs e)

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

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

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

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

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

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

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

Другие вопросы по тегам