Active Directory: сбой ADsOpenObject при вызове из Windows службы, работающей под учетной записью сетевой службы - PullRequest
1 голос
/ 21 февраля 2020

У меня есть приложение, которое может работать как 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, поэтому я предположил, что он будет работать нормально из службы.

1 Ответ

0 голосов
/ 21 февраля 2020

Нет, мой компьютер не находится в том же домене, что и сервер AD.

Это ваша проблема. Компьютер может проходить проверку подлинности в домене только с использованием учетной записи компьютера, только если он присоединен к тому же или доверенному домену. В противном случае домен не будет знать, кто вы.

Вы можете передавать различные учетные данные в ADsOpenObject. Имя пользователя и пароль - это второй и третий параметры, которые вы устанавливаете на NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...