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.

Ответ 1

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

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

Application_AuthorizeRequest(object sender, EventArgs e)

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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