Разрешить адрес домена в / для Active Directory [.net] - PullRequest
1 голос
/ 15 июля 2009

Есть ли простой способ разрешить путь Active Directory для доменного имени в Active Directory?

например. ваша учетная запись пользователя может быть SITE \ Username или DEPARTMENT \ Username, но фактический путь домена SITE может быть site.company.com или DEPARTMENT может быть dep.company.com и т. д.

Я пытаюсь найти способ превратить ОТДЕЛ в DC = dep, DC = company, DC = com и т. Д. Для правильного поиска в Active Directory ...

1 Ответ

2 голосов
/ 15 июля 2009

Возможно, у вас есть компания с одним форрестом (company.com) и парой дочерних доменов (САЙТ и ОТДЕЛ в вашем случае). Биты SITE- и DEPARTMENT являются представлениями доменов NetBIOS. Не очень часто они отличаются от соответствующих имен DNS, но это возможно. Просто убедитесь, что мы не говорим о подразделениях и «физических» сайтах Active Directory.

Предполагая, что выше, вот несколько вариантов:

Предполагается, что ваше приложение работает под учетной записью с «forrest-wide read read» (возможностью доступа к вашим различным доменам):

using System.DirectoryServices.ActiveDirectory;

// ...

DirectoryContext directoryContext
    = new DirectoryContext(DirectoryContextType.Domain, "DEPARTMENT");
Domain domain = Domain.GetDomain(directoryContext);
String domainName = domain.Name;
String domainComponent = "DC=" + domainName.Replace(".", ",DC=");
Console.WriteLine(domainComponent);

(Я не нашел "встроенного в System.DirectoryServices" способа преобразования domain.company.com в DC = domain, DC = company, DC = com, но простое манипулирование строками, описанное выше, должно сработать. )

Если вы используете учетную запись не forrest-wide (или если DEPARTMENT и SITE не являются доменами в одном и том же forrest, но сами по себе являются отдельными forrests), вам придется вести список имен пользователей и паролей для использования в зависимости от строк "DEPARTMENT" или "SITE":

// if(domainNetBios == "DEPARMENT")...
DirectoryContext directoryContext
    = new DirectoryContext(DirectoryContextType.Domain,
    "DEPARTMENT",
    "UserInDEPARTMENT",
    "PassForUserInDEPARTMENT");

Если вы не хотите связываться с разными лесами / доменами, чтобы получить доменное имя / компонент, вы можете попробовать что-то вроде:

IPAddress[] addresses = Dns.GetHostAddresses("DEPARTMENT");
IPHostEntry host = Dns.GetHostEntry(addresses[0]);
Int32 dotIndex = host.HostName.IndexOf('.');
String domain =
    host.HostName.Substring(dotIndex + 1, host.HostName.Length - dotIndex - 1);
Console.WriteLine(domain);

Но вышеизложенное предполагает, что NETBios-имя совпадает с первой частью DNS-имени и что разрешение DNS работает правильно. То, что мы делаем выше, - это запросить список контроллеров домена и затем удалить имена хостов из DNS-имен. Не особо чистый вариант ...

...