2010-04-08 114 views
0

我的代码已经与旧的Active Directory服务器一起工作,现在我已将它指向新的Windows Server 2008 AD系统。现在,群组名称将返回SID而不是名称。我对AD方面知之甚少,不知道是否有办法让新的AD服务器像旧的AD服务器一样工作。如何从.NET Active Directory组中获取组名称?

我的代码基于Codeplex上BlogEngine.NET的Active Directory角色提供程序。

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

我相信这一点,我将需要调整行。

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

此时ExpandTokenGroups正在返回SID值,而Translate已将其更改为人类可读组名。我想知道是否应该通过与NTAccount不同的类型进行翻译。

我能做些什么来获得组名?

回答

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 2010-04-08 21:06:01

相关问题