Добавить аутентификацию в подпапки без создания веб-приложения - PullRequest
2 голосов
/ 04 февраля 2009

У нас есть общедоступное веб-приложение с пользовательскими элементами управления, библиотеками доступа к данным, графикой и т. Д. Мы хотим создать новый безопасный раздел сайта, который будет получать доступ к некоторым из уже существующих ресурсов.

Изначально мы создали новый раздел сайта как виртуальный каталог, который (как мы надеялись) позволил бы нам получить доступ к ресурсам родительского сайта. Мы добавили соответствующую информацию о местоположении в базовый web.config (аутентификация и авторизация), но продолжаем видеть следующую ошибку «Сообщение об ошибке синтаксического анализатора: ошибка использовать раздел, зарегистрированный как allowDefinition =« MachineToApplication », за пределами уровня приложения. ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS. "

В ответ на эту ошибку мы создали каталог как новое приложение. Это позволяет нам правильно проходить аутентификацию, но имеет недостаток, заключающийся в невозможности доступа к каким-либо ресурсам в родительском каталоге (поскольку он находится за пределами области приложения).

Есть ли способ защитить новый раздел сайта, в то же время используя уже существующие ресурсы?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2009

В вашем файле web.config в корне вашего сайта, если вы добавите:

<location path="relativePathToDir">
        <system.web>
            <authorization>
                <deny users="?"/>
            </authorization>
        </system.web>
    </location>

Это работает для меня с использованием FormsAuthentication, пользователь перенаправляется на страницу входа по умолчанию, если не аутентифицирован

3 голосов
/ 22 марта 2011

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

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

  1. ASP.NET может иметь только один режим аутентификации для одного приложение.
  2. разные приложения не могут делиться ресурсом среди них.

Сценарий

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

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

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

  • Включить анонимную аутентификацию,
  • Включить проверку подлинности 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>
1 голос
/ 04 февраля 2009

Удалите приложение, затем добавьте его в файл web.config верхнего уровня:

<configuration>
    <system.web>
        <!-- applies application wide -->
    </system.web>

    <location path="securedirectory" allowOverride="false">
        <system.web>
            <!-- applies only to the path specified -->
        </system.web>
    </location>

</configuration>

Ссылка MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...