У меня есть приложение, которое может работать как EXE или как windows служба. Это приложение при запуске пытается подключиться к серверу Active Directory и загрузить список пользователей, которые являются членами указанной группы. Когда я запускаю как EXE, это работает нормально, никаких проблем. Когда я работаю как windows служба, я работаю под учетной записью сетевой службы, и она не работает. В частности, следующий вызов ADsOpenObject завершается ошибкой:
HRESULT hr = ADsOpenObject(ldapPath.c_str(),
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IDirectorySearch,
(void**)&domainToSearch);
- Возвращен код ошибки 0x8007952E, что означает «неверные предоставленные учетные данные».
- Значение ldapPath примерно такое this: L "LDAP: // (server-ip) / DC = (имя-сервера), DC = local"
Как видите, я передаю NULL и NULL для пользователя имя и пароль. При запуске в качестве EXE, этот вызов представит учетные данные вошедшего в систему пользователя. Пока этот пользователь имеет учетную запись на сервере Active Directory, этот вызов будет успешным. При запуске в качестве службы под учетной записью сетевой службы, насколько я понимаю, этот вызов представит учетные данные моего компьютера. Я добавил учетную запись компьютера для моей машины на сервере AD, но этот вызов по-прежнему происходит каждый раз. Я просмотрел журнал событий безопасности на сервере и вижу, что попытки входа в систему из моей службы заканчиваются ошибкой «Неизвестный пользователь или неверный пароль», а «Имя учетной записи» равно (мой компьютер) $. Таким образом, похоже, что я неправильно настроил учетную запись компьютера на сервере AD.
- Итак, мой вопрос: как правильно настроить учетную запись компьютера в Active Directory, чтобы служба, работающая на этом компьютере, могла выполнять вызов ADsOpenObject без указания имени пользователя и пароль?
Я должен также указать, что мой компьютер зарегистрирован в другом домене, чем сервер AD, который я пытаюсь запросить, поэтому я включаю IP-адрес в строку LDAP. Это проблема? Опять же, этот подход отлично работает из EXE, поэтому я предположил, что он будет работать нормально из службы.