Управление ADSI / IIS и олицетворение ASP.NET - PullRequest
0 голосов
/ 05 марта 2009

Я нахожусь в процессе написания небольшого веб-приложения, которое позволило бы мне управлять несколькими установками IIS на разных серверах в нашей сети. У нас нет контроллера домена.

Я написал небольшой контроллер олицетворения, который использует API win32 и его метод LogonUser. Затем я использую System.DirectoryServices и поставщика IIS ADSI для создания нового сайта.

У меня есть следующая подпрограмма (для лучшей читаемости некоторые значения поменялись на строки с открытым текстом):

            if (impersonationSvc.ImpersonateValidUser("Administrator@SRV6", String.Empty, "PASSWORD))
            {


            string metabasePath = "IIS://" + server.ComputerName + "/W3SVC";
            DirectoryEntry w3svc = new DirectoryEntry(metabasePath, "Administrator", "PASSWORD");

            string serverBindings = ":80:" + site.HostName;
            string homeDirectory = server.WWWRootNetworkPath + "\\" + site.FolderName;


            object[] newsite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory };

            object websiteId = (object)w3svc.Invoke("CreateNewSite", newsite);
            int id = (int)websiteId;

            impersonationSvc.UndoImpersonation();
        }

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

Если я использую, например, SRV5, другой Сервер в нашей сети (без домена), ImpersonateValidUser работает, создается DirectoryEntry, но w3svc.Invoke завершается с ошибкой со следующим:

[COMException (0x80070005): доступ запрещен]

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +377678
System.DirectoryServices.DirectoryEntry.Bind() +36
System.DirectoryServices.DirectoryEntry.get_NativeObject() +31
System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) +53

...

Кто-нибудь знает, как я мог решить это?

Ответы [ 2 ]

1 голос
/ 05 марта 2009

Вы не можете использовать олицетворение в этой ситуации. Для учетной записи, которую вы олицетворяете, нужны права входа в систему на локальном компьютере.

Если ваши веб-серверы не являются частью домена, я думаю, что идея веб-сервисов Tant102 - ваш единственный путь.

0 голосов
/ 05 марта 2009

Я бы заглянул в журнал событий SRV5, чтобы проверить, какие привилегии используются при подключении к этому серверу. Вам может потребоваться изменить групповые политики для регистрации сбоев в журнале безопасности.

Звучит проще настроить веб-сервисы на ваших серверах, предпочтительно защищенные логинами и / или IP-ограничениями, которые выполняют подобные операции.

...