Параметры авторизации ASP.NET web.config игнорируются

У меня есть веб-сайт asp.net (динамические данные), настроенный как приложение в подкаталоге другого сайта. Для этого сайта требуются другие параметры безопасности, чем для сайта верхнего уровня. Что-то типа:

    <authorization>
       <allow roles="ADMIN"/>
       <deny users="*"/>
    </authorization>

Эти настройки игнорируются на дополнительном сайте. Тем не менее, они работают на сайте верхнего уровня, но даже если они установлены на сайте верхнего уровня, они не наследуются дочерним сайтом и находятся в свободном доступе. Что могло привести к игнорированию этих настроек? Я пробовал добавить:

<location path="." inheritInChildApplications="false">  

на верхний уровень web.config, а затем установив указанное выше правило авторизации на дополнительном сайте, даже попытался просто запретить всем пользователям. При посещении сайта он выглядит так: http://mysite/mybrokensite

Я использую проверку подлинности Windows.


person Community    schedule 27.03.2009    source источник
comment
Мы можем увидеть тег ‹authentication›?   -  person almog.ori    schedule 01.07.2009


Ответы (3)


Я думаю, что главное в этом

веб-сайт настроен как приложение в подкаталоге другого сайта

Если это отдельное приложение в IIS, у него должен быть собственный файл web.config, и настройки безопасности могут быть установлены оттуда. Таким образом, у вас будет один файл web.config для основного сайта и один для дочернего. на самом деле это два приложения.

Если это просто подпапка на вашем веб-сайте, это не применимо. Это зависит от того, как вы настроили его в IIS. Если это отдельное приложение, то значок будет значком типа мир / капуста. Если это подпапка, то значок будет ... ну, папкой.

person Crab Bucket    schedule 27.03.2009
comment
Веб-сайт настроен как отдельное приложение (имеет значок типа капусты) и имеет собственный файл web.config. Вот почему мне сложно понять, почему он не читает настройки web.config. Я попытался установить параметры безопасности как в web.configs (сайты верхнего и нижнего уровня), но безрезультатно. - person ; 30.03.2009
comment
У вас настроена проверка подлинности Windows для дополнительного сайта, а также для основного сайта? то есть щелкните правой кнопкой мыши дочерний сайт, выберите свойства, вкладку безопасности каталога, затем верхнюю кнопку редактирования. По умолчанию он будет анонимным, что приведет к игнорированию ваших настроек. - person Crab Bucket; 31.03.2009

Чтобы уточнить ответ Тима, убедитесь, что в IIS он настроен как виртуальный каталог. Посмотрите на страницу свойств этого каталога на вкладке IIS Admin, Directory (или Home Directory). Если метка приложения неактивна, нажмите кнопку «Создать». Теперь IIS загрузит web.config из этого каталога.

person Bryan    schedule 27.03.2009

Я набрал резюме, так как многие сталкивались с такой же ситуацией с аутентификацией подпапок.

Подпапка Авторизация

  • ASP.NET может иметь только один режим проверки подлинности для одного приложения.
  • Различные приложения НЕ МОГУТ совместно использовать ресурсы между собой.

Сценарий

Скажем, домашняя страница не должна запрашивать диалог входа в систему. Он должен позволять пользователям проходить без входа в систему. Однако в том же приложении, предположительно в другой папке, другая страница должна проверять права пользователя по таблице базы данных с использованием идентификатора входа в сеть пользователя. По умолчанию IE обрабатывает весь веб-сайт только с именем хоста в интрасети. По умолчанию в интрасети, он не будет запрашивать диалоговое окно входа в систему и передавать имя пользователя и пароль приложению, если используется проверка подлинности Windows. Однако сложность заключается в том, что если приложение имеет реальный домен, IE будет думать, что это Интернет-сайт, и запросит логин и пароль, если используется проверка подлинности Windows.


Единственный способ не продвигать диалоговое окно входа в систему для Интернет-сайта с использованием проверки подлинности Windows - это также включить анонимную проверку подлинности в IIS. Однако вы потеряете возможность захвата информации для входа, поскольку анонимный пользователь приоритет над проверкой подлинности Windows. Хорошая новость в том, что есть способ решить эту проблему. Если вложенная папка приложения должна захватывать информацию для входа в систему, вам нужно будет перезаписать родительскую авторизацию в элементе Location в web.config.

1 В IIS настройте аутентификацию следующим образом:

  1. Включить анонимную аутентификацию,
  2. Включить проверку подлинности Windows

2 Добавьте следующее в Web.Config.

<authentication mode="Windows" />
  <authorization>
   <allow users="*" />
</authorization>

<!-- secured is the relative subfolder name. deny anonymous user, so only the authenticated login will pass through -->
<location path="secured" allowOverride="true">
  <system.web>
    <authorization>        
        <deny users="?" />
    </authorization>
  </system.web>
</location>
person devXen    schedule 23.03.2011