Как запросить LDAP из Java, чтобы получить DN объекта из «netbiosDomain \ samAccountName» из Active Directory - PullRequest
0 голосов
/ 20 сентября 2018

Мне нужно запросить LDAP из Java, чтобы преобразовать netbiosDomain\samAccountName пользователя или группы в distinguishedName.

Например

Есть два дочерних домена: * DC=northeast,DC=domain,DC=com * DC=southeast,DC=domain,DC=com

И есть 2 разных пользователя:

  • NORTHEAST\NICKD = CN=nickd,CN=Users,DC=northeast,DC=domain,DC=com
  • SOUTHEAST\NICKD = CN=nickd,CN=Users,DC=southeast,DC=domain,DC=com

Учитывая NORTHEAST\NICKD, как я могу запросить ldap, чтобы преобразовать это в CN=nickd,CN=Users,DC=northeast,DC=domain,DC=com?

По сути, вопрос может быть повторен: как я могу запросить LDAP для distinghedName домена netbios?

Ответ здесь https://social.technet.microsoft.com/Forums/scriptcenter/en-US/dbbeeefd-001b-4d1d-93cb-b44b0d5ba155/how-do-you-search-for-a-domain-samaccountname-in-active-directory?forum=winserverDS&prof=required предоставляет команду vbscript и powershell, которая может выполнитьЭто.Но мне нужен запрос LDAP, который может это сделать.Или все, что можно вызвать из Java кроссплатформенным способом.

Вот vbscript, который может конвертировать northeast\nickd в CN=nickd,CN=Users,DC=northeast,DC=domain,DC=com:

' Constants for the NameTranslate object.
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1

' Specify the NetBIOS name of the domain.
strNetBIOSDomain = "northeast"

' Specify the NT name of the user.
strNTName = "nickd"

' Use the NameTranslate object to convert the NT user name to the
' Distinguished Name required for the LDAP provider.
Set objTrans = CreateObject("NameTranslate")
' Initialize NameTranslate by locating the Global Catalog.
objTrans.Init ADS_NAME_INITTYPE_GC, ""
' Use the Set method to specify the NT format of the object name.
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strNTName
' Use the Get method to retrieve the RFC 1779 Distinguished Name.
strUserDN = objTrans.Get(ADS_NAME_TYPE_1779)

' Escape any "/" characters with backslash escape character.
' All other characters that need to be escaped will be escaped.
strUserDN = Replace(strUserDN, "/", "\/")

Wscript.Echo strUserDN

И powershell:

$Name = "northeast"
$Domain = "nickd"

# Use the NameTranslate object.
$objTrans = New-Object -comObject "NameTranslate"
$objNT = $objTrans.GetType()

# Initialize NameTranslate by locating the Global Catalog.
$objNT.InvokeMember("Init", "InvokeMethod", $Null, $objTrans, (3, $Null))
# Specify NT name of the object.
# Trap error if object does not exist.
Try
{
    $objNT.InvokeMember("Set", "InvokeMethod", $Null, $objTrans, (3, "$Domain\$Name"))
    # Retrieve Distinguished Name of the object.
    $DN = $objNT.InvokeMember("Get", "InvokeMethod", $Null, $objTrans, 1)

    $DN
}
Catch
{
    "Bad name: $Domain\$Name"
}

связанные: https://serverfault.com/questions/234041/can-an-ldap-query-on-ad-provide-the-netbios-domain-name-for-a-single-account-whe

1 Ответ

0 голосов
/ 21 сентября 2018

Я думаю, я понял это.Но я проверяю, чтобы убедиться.

Из интернет-поисков я узнал, что в AD есть специальное место для хранения доменов и их атрибутов CN=Partitions,CN=Configuration,DC=domain,DC=com.

Я делалзапрос к CN=SOUTHEAST,CN=Partitions,CN=Configuration,DC=domain,DC=com, но в нем всегда отсутствовали нужные мне атрибуты объекта ldap, а именно ncname, который является DN домена.

Если вы видите этот ответ заявляет, что причиной моей проблемы было то, что я запрашивал глобальный каталог!При запросе к глобальному каталогу у вас будут отсутствовать определенные атрибуты.

Поэтому при выполнении многодоменного поиска LDAP для пользователей и групп вам необходимо использовать глобальный каталог (порт 3268 по умолчанию), или вы выигралиполучить пользователей / группы из поддоменов.Но при выполнении запроса LDAP для получения DN для домена netbios не забудьте подключиться к родительскому серверу LDAP и использовать локальный порт ldap (по умолчанию порт 389).

Запрос против ldap://parent-ldap-host:389 становится:

  • Базовое DN: CN=SOUTHEAST,CN=Partitions,CN=Configuration,DC=domain,DC=com
  • Фильтр поиска: (objectClass=*)
  • Область поиска: wholeSubtree
  • Атрибуты:ncname

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

...