Вы должны разбить ваше приложение на три части:
Служба Windows
Здесь будет размещено приложение WCF или Remoting. Вы хотите разместить здесь код, который требует привилегированного доступа к вашей системе. Например, создание и удаление сайтов. Запустите этот сервис под учетной записью, у которой достаточно прав для выполнения операций, используя Microsoft.Web.Administration
.
сборка Trusted Wrapper или Proxy в сборе
Это просто подписанная сборка оболочки, которая установлена в GAC. Его роль заключается в том, чтобы передавать вызовы из вашего веб-приложения с низким уровнем доверия для выполнения привилегированных действий в коде, запущенном в приведенном выше сервисе. Пометьте сборку атрибутом AllowPartiallyTrustedCallers
(если ваш сервер настроен на частичное доверие) и отметьте все классы, которым требуется доступ к службе удаленного взаимодействия, [PermissionSet(SecurityAction.Assert, Unrestricted=true)]
.
Приложение переднего плана (или веб-служба)
Это интерфейс вашего приложения (будь то веб-приложение с графическим интерфейсом или веб-сервис). Запустите его в своем собственном пуле приложений с достаточными правами для выполнения, например IUSR
или аналогичной учетной записью. В идеале вы также должны выполнять это с частичным доверием.
Ваше веб-приложение / служба ссылается на сборку Trusted Wrapper в GAC, которая, в свою очередь, имеет ссылку на приложение удаленного взаимодействия или WCF, работающее в службе Windows.
Использование этого многоуровневого подхода означает, что вы блокируетесь, предоставляя доступ к определенным привилегированным операциям, которые выполняются только в вашей службе Windows.
Этот подход довольно хорошо описан в Приложении C к «Доминик Байер» « Разработка более защищенных приложений Microsoft ASP.NET 2.0 ». Я настоятельно рекомендую получить копию.