Я пытаюсь установить приложение ASP.Net на веб-сервер IIS6. Сайт требует, чтобы пользователь прошел аутентификацию в Windows, и это работает в нескольких других приложениях на том же сервере.
В IIS я включил анонимный доступ и проверку подлинности Windows.
В web.config аутентификация установлена на:
<authentication mode="Windows"/>
и авторизация ...:
<authorization>
<allow roles="Users"/>
<deny users="*"/>
</authorization>
Т.е. разрешить всем пользователям в роли «Пользователи» и запретить всем остальным. Это подход, который работает с несколькими другими приложениями на одном сервере.
Если я запустил сайт, мне будет предложено ввести имя пользователя и пароль.
Если я удалю строку:
<deny users="*"/>
Я могу получить доступ к сайту, и все работает, но учетные данные пользователя не передаются на сайт (Page.User.Identity.Name возвращает пустую строку в ASP.Net).
Этот сайт имеет такие же (унаследованные) права доступа к файлам, что и другие рабочие сайты на сервере.
Единственная разница в аутентификации / авторизации между этим сайтом и другими рабочими сайтами заключается в том, что на нем работает Asp.Net 4 (но на сервере есть и другие рабочие сайты asp.net 4).
Что мне здесь не хватает?
Где мне искать?
Если сайт требует, чтобы пользователь аутентифицировался, вам следует удалить анонимный доступ и разрешить только интегрированные окна. Page.User.Identity.Name возвращает пустое значение, поскольку анонимная проверка подлинности используется поверх интегрированных окон.
Если это домен, то разрешающие роли должны быть в форме домен \ группа безопасности. "?" в запрете пользователям обычно достаточно заблокировать анонимный доступ.
<identity impersonate="true" />
может быть полезно, если вашему коду требуется доступ к ресурсу, который должен пройти аутентификацию как пользователь, использующий ваше приложение.
Или попробуйте следующее.<deny users="*,?"/>
Попробуй использовать "?" вместо «*» в правиле «запретить пользователям».