Я видел этот вопрос несколько раз в Интернете, но ни один из ответов, которые я еще не получил, решил мою проблему.
В моем приложении включена проверка подлинности с помощью форм, и анонимный доступ запрещен:
<configuration>
...
<system.web>
...
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Account/Authenticate.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
Доступ к странице входа разрешен:
</system.web>
<location path="Account/Authenticate.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
Анонимная проверка подлинности включена в диалоговом окне свойств проекта, а проверка подлинности Windows отключена. Я также проверил файл applicationhost.config для IIS Express в своих документах. В нем отключены все режимы аутентификации, кроме анонимного. Я использую IIS Express в качестве сервера отладки.
Насколько мне известно, это все, что вы должны сделать для устранения ошибки отказа в доступе, но в моем браузере все еще появляется следующее сообщение об ошибке:
Сообщение об ошибке 401.2 .: Неавторизованный: не удалось войти в систему из-за конфигурации сервера. Убедитесь, что у вас есть разрешение на просмотр этого каталога или страницы на основе предоставленных вами учетных данных и методов проверки подлинности, включенных на веб-сервере.
Интересно отметить, что если я включу проверку подлинности Windows, страница входа в систему будет отображаться правильно. Однако это не работает, когда сайт развернут. Если он развернут, то активация аутентификации Windows просто вызовет всплывающее окно JavaScript с запросом кредитов (а не в форме, которую я создал).
Кто-нибудь знает, как это исправить. На данный момент у меня есть единственный выход - вручную ограничить доступ к коду и позволить IIS пропускать весь трафик.
редактировать
В качестве окончательного решения я просто вручную аутентифицировал пользователей. Насколько известно IIS, анонимный доступ не ограничен, но сеанс проверяется при каждом запросе, чтобы убедиться, что пользователь вошел в систему (сеанс - это то место, где я храню свой объект подключения к БД для каждого пользователя). Для статического контента я просто использую обработчики HTTP, которые используют состояние сеанса только для чтения для проверки доступа перед обслуживанием файлов.