Управление ADSI/IIS и олицетворение ASP.NET
-
03-07-2019 - |
Вопрос
Я пишу небольшое веб-приложение, которое позволит мне управлять несколькими установками 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
...
Кто-нибудь знает, как я могу это решить?
Решение
В этой ситуации вы не можете использовать олицетворение.Учетной записи, которую вы выдаете за себя, необходимы права входа на локальном компьютере.
Если ваши веб-серверы не являются частью домена, я думаю, что идея веб-сервисов Tant102 — ваш единственный выход.
Другие советы
Я бы заглянул в журнал событий SRV5, чтобы проверить, какие привилегии используются при подключении к этому серверу.Возможно, вам придется изменить групповую политику, чтобы фиксировать сбои в журнале безопасности.
Кажется, проще настроить веб-сервисы на ваших серверах, желательно защищенные логинами и/или ограничениями IP, которые выполняют подобные операции.