Столкнулся с проблемой настройки безопасности доступа
к web-сайту и его ресурсам. Просьба дать совет.
1. В настройках IIS разрешил анонимный доступ, но
отключил встроенную проверку подлинности Windows.
2. Использовал Forms Authentication.
Файл web.config выглядит следующим образом:
<!-- AUTHORIZATION -->
<authentication mode="Forms">
<forms name="MyCookie"
loginUrl="Login.aspx"
protection="All"
timeout="30"
path="/" />
</authentication>
<!-- AUTHORIZATION -->
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
<!-- IMPERSONATION -->
<identity impersonate="false" />
3. Для хранения учетных записей пользователей
использовал XML файл приблизительно такого формата:
<LogBook>
<User>
<Name>dima</Name>
<Pass>open</Pass>
<Role>user</Role>
</User>
</LogBook>
Лучше конечно же использовать базу данных под паролем,
но не в этом суть, хотя на сегодняшний день другого
оптимального варианта не видно.
4. Посредством NTFS разрешил встроенной учетной записи
[computername]\ASPNET доступ к файлу logbook.xml по
чтению и записи.
Проблема заключается в том, что, если не использовать
встроенную проверку подлинности Windows, а при
проектировании web-приложений глобального назначения
(в отличие от Intranet проектов) именно так и следует
поступать, то IIS совместно с .NET Framework - при
условии успешной аутентификации пользователя,
в любом случае, присваивают исполняемому коду системную
учетную запись [computername]\ASPNET. Таким образом
исполняемый код web-приложения получает только те
разрешения, которые дает данной учетной записи Windows.
В частности, по умолчанию, у этой учетной записи
остсутствуют разрешения NTFS на чтение и запись файлов
в текстовом формате, в том числе это относится и к
базам данных.
Таким образом, мой вопрос звучит следующим образом:
как лучше настроить приложение и сервер в целом, чтобы
гарантировать безопасное использование web-приложением
своих ресурсов, но в то же самое время обеспечить
гибкость администрирования, например, посредством
специального администрирующего web-приложения?
Разрешать при помощи NTFS доступ к каждому отдельному
файлу как-то примитивно (на мой взгляд), тем более, что
таким образом любое приложение, размещенное на сервере
и использующее встоенную учетную запись ASPNET, имеет
доступ к таким файлам, что в общем-то тоже not good ...