Настройки авторизации для папки в ASP.NET - PullRequest
1 голос
/ 20 августа 2009

У меня есть веб-сайт asp.net, я хочу ограничить доступ всех пользователей к папке с именем «log», и у меня есть этот элемент в web.config:

<location path="log">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

и этот элемент перед ним в system.web:

<authorization>
    <allow users="*"/>
</authorization>

но у меня все еще есть доступ к этому URL: http://www.mydomain.com/log/log.txt

Есть идеи?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 20 августа 2009

.txt файлы не обрабатываются ASP.NET по умолчанию. Вам придется заблокировать доступ к папке из IIS.

Если вы используете IIS 7, вы можете использовать Фильтрация запросов для достижения этой цели.

0 голосов
/ 23 марта 2011

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

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

  • 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>
0 голосов
/ 20 августа 2009

Чтобы избежать этой путаницы, я обычно создаю один файл web.config в каталогах, для которых мне нужно установить различные разрешения.

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

Пример:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>
...