一旦我在Active Directory中获得用户组,如何获取组的SID?

时间:2012-07-03 10:14:26

标签: c# windows active-directory active-directory-group

我正在使用DirectorySearcher来获取ActiveDirectory中的用户组。

我的问题是,一旦我使用“memberOf”获得用户组,如何获得与每个组关联的SID?

我在.NETFramework 2.0环境中工作。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();

3 个答案:

答案 0 :(得分:4)

在单个LDAP搜索中无法执行此操作,因为memberOf返回区分名称。您必须执行另一个绑定才能从组对象中获取objectSid属性。这是代码。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();

foreach (string dn in searchresult.Properties["memberOf"])
{
    DirectoryEntry group = new DirectoryEntry(string.Format("LDAP://{0}/{1}", sUserDomain, dn));
    SecurityIdentifier sid = new SecurityIdentifier(group.Properties["objectSid"][0] as byte[], 0);
    Console.Out.WriteLine(sid.Value);
}

答案 1 :(得分:1)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

    // define context for current domain
    using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
    {
        // find  user 
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "YourNameHere");

        if (user != null)
        {
            // get groups the user is a member of
            var groups = current.GetGroups();

            // iterate over all those groups
            foreach(var group in groups)
            {
                // fetch the SID for each group
                var sid = group.Sid;
            }
        }
    }   

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!

答案 2 :(得分:1)

看看他的文章: Retrieving user SID using DirectoryEntry and DirectorySearcher

这为您提供了一个检索SID的完整工作示例。