如何从.NET的Active Directory组中获取组名?

时间:2010-04-08 20:13:37

标签: .net active-directory ldap

我的代码与旧的Active Directory服务器一样,现在我已将其指向新的Windows Server 2008 AD系统。现在,组名称将返回SID而不是名称。我不太了解AD方面是否有办法让新的AD服务器像旧的AD服务器一样工作。

我的代码基于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不同的类型来翻译。

如何获取群组名称?

2 个答案:

答案 0 :(得分:0)

对于Translating Between Names and SIDs的解决方案有一个很好的解释。

基本上,您调用LsaLookupSids函数调用。

希望这有帮助!

答案 1 :(得分: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();
    }