Получить группы пользователей из Active Directory с ПК, который НЕ является частью домена

Мне нужно получить список групп, в которые входит специальный пользователь. Обычно я могу сделать это с помощью NetUserGetGroups, вот код:

function GetLDapUserGroups(UserName, DomainName : string) : TStringList;
var bufptr : Pointer;
  ServerName : String;
  EntriesRead : DWord;
  TotalEntries : DWord;
  buf : Pbyte;
  PGlobalGroupInfo : PGroupInfo0;
  i : integer;
begin
     result:=TStringList.Create;

     // get servername
     // if problems occur maybe set param2 to nil
     bufptr := nil;
     NetGetAnyDCName(nil, PWideChar(DomainName), bufptr);
     ServerName := PWideChar(bufptr);
     Delete(ServerName, 1, 2);  // remove starting '\\' from server Name

     if NetUserGetGroups( PWideChar(ServerName), PWideChar(UserName), 0, buf, MAX_PREFERRED_LENGTH,
                          @EntriesRead, @TotalEntries)=NERR_SUCCESS then
     begin
          PGlobalGroupInfo := PGroupInfo0(buf);

          // Store group names in list
          for i:=0 to EntriesRead - 1 do
          begin
               result.Add(PGlobalGroupInfo^.grpi0_name);
               inc(PGlobalGroupInfo);
          end;
     end;
     NetAPIBufferFree(buf);
end;

но это не работает, если моя программа работает на ПК, который не является частью домена AD. Очевидно, что это возможно, я пытался использовать LDAP Administrator (от Softerra), и там это работает.

Я старался:

  • JclWin32.NetUserGetGroups - Нет. (Я могу понять, что это не работает, я не могу передать пароль пользователя здесь. Работает нормально с ПК, который находится в домене)
  • JwaLmAccess.NetUserGetLocalGroups - Нет. Также нет возможности передать пароль
  • NetApi.GetNetUserGroups - та же история здесь
  • CreateOleObject('ADODB.Command')... - Нет

Мне только что удалось проверить пароль с компьютера, не являющегося доменом (см. Проверка имени пользователя / пароля в Active Directory с компьютера, который НЕ является частью домена), поэтому я попытался выполнить команды при входе в систему, но это также не удалось.

Оглядываясь в источниках джедаев, я наткнулся на функцию "JwaWinLDAP.ldap_search_sW". Для меня это пахнет многообещающе, так как я могу передать токен LDap от входа в систему. Однако я не нашел примеров кода о том, как искать группы пользователей. Я должен продолжать смотреть на эту функцию?

Кто-нибудь может подтолкнуть меня в правильном направлении, пожалуйста?:) Спасибо!

1 ответ

Прежде чем вы сможете запросить AD, вы должны сначала войти в систему с пользователем, который имеет права на доступ к этой AD.

Использование токена, основанного на локальном входе пользователя, почти наверняка не даст вам доступа к запросам AD.

Другие вопросы по тегам