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-в-жерех