Учитывая GUID, представляющий пользователя в Active Directory, как бы я использовал это, чтобы определить отличительное имя? - PullRequest
4 голосов
/ 17 августа 2010

Учитывая GUID, представляющий пользователя в Active Directory, как бы я использовал это, чтобы определить "отличительное имя" пользователя с помощью C #?

GUID был получен ранее в нашем приложении с использованием directoryEntry.Guid; MSDN Link

Ответы [ 3 ]

10 голосов
/ 17 августа 2010

Как вы уже поняли, GUID - это то, что вы ищете, попробуйте это:

using System;
using System.DirectoryServices.AccountManagement;

public static class DomainHelpers
{    
    public string GetDistinguishedName(string domain, string guid)
    {
        var context = new PrincipalContext(ContextType.Domain, domain); 
        var userPrincipal  = UserPrincipal.FindByIdentity(context, IdentityType.Guid, guid);

        return userPrincipal.DistinguishedName;
    }
}

Я использовал это с IdentityType.Name, так что не уверен, что он будетработать за IdentityType.Guid, но попробовать стоит.

3 голосов
/ 24 мая 2011

Вы можете получить отличительное имя из каталога DirectoryEntry напрямую:

public string GetDN(DirectoryEntry de)  
{  
    return de.Properties["distinguishedName"].Value.ToString();  
}  

Если вам все еще нужно связать через GUID , вы также можете сделать это:

public string GetDNviaGUID(Guid queryGuid)  
{  
    DirectoryEntry de = new DirectoryEntry("LDAP://<GUID=" + queryGuid + ">");  
    return de.Properties["distinguishedName"].Value.ToString();
}

Следующие свойства и методы не работают при привязке через GUID или SID: ADsPath, Имя, Родитель, GetObject, Создать, Удалить, CopyHere, MoveHere.

Вы можете обойти это, извлекая объект через GUID, получая его отличительное имя, а затем связывая, используя DN.

0 голосов
/ 17 августа 2010

Вы нет. GUID - это не преобразование для начала, это совершенно случайный уникальный код.

По сути, вам нужно иметь свой SID, затем ВЫЗОВАТЬ в активную директорию и получить объект User с таким же sid, а затем прочитать отличительное имя из этого. Обратите внимание, что это не КОНВЕРСИЯ, поэтому ответ - нет.

если бы было возможно обратное преобразование, SID был бы бесполезен для целей преобразования, так как я всегда мог генерировать SID из вашего отличительного имени, которое - в домене - public.

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