2010-04-08 2 views
0

У меня есть код, который работает с старым сервером Active Directory, и теперь я указал его на новую систему Windows Server 2008 AD. Теперь имена групп возвращаются с идентификаторами безопасности, а не с именами. Я не знаю достаточно о стороне AD, чтобы узнать, есть ли способ заставить новый сервер AD работать как старый сервер AD.Как получить имя группы из группы Active Directory с .NET?

Мой код основан на поставщике роли Active Directory для BlogEngine.NET на Codeplex.

http://blogengineadrp.codeplex.com/sourcecontrol/network/Show?projectName=BlogEngineADRP&changeSetId=5843#138380

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

IdentityReferenceCollection irc = ExpandTokenGroups(user).Translate(typeof(NTAccount)); 

Сейчас ExpandTokenGroups возвращает значение SID в то время как Перевести работал, чтобы изменить его в читаемый имя группы людей. Я хотел бы знать, должен ли я проходить другой тип, чем NTAccount для Translate.

Что я могу сделать, чтобы получить название группы?

ответ

0

Это мое решение в C#, которое не является оптимальным, но оно работает.

public override string[] GetRolesForUser(string username) 
    { 
     // list to store names of roles 
     List<String> roles = new List<string>(); 

     // get the user directory entry 
     DirectoryEntry user = getUser(username); 

     foreach (String prop in user.Properties["memberOf"]) 
     { 
      if (prop.IndexOf("CN=") == 0 && prop.IndexOf(",") != -1) 
      { 
       var groupName = prop.Substring("CN=".Length, prop.IndexOf(",") - "CN=".Length); 
       roles.Add(groupName); 
      } 
     } 

     return roles.ToArray(); 
    } 
0

Существует хорошее объяснение решения по адресу: Translating Between Names and SIDs.

В принципе, вы вызываете вызов функции LsaLookupSids.

Надеюсь, это поможет!

+0

Похоже, что решение предназначено только для C++, что является неудачным. Я хочу, чтобы .NET лучше поддерживала Active Directory и LDAP, поскольку это важно. – Brennan

Смежные вопросы