繁体   English   中英

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

[英]How to get SID of a group once i get groups of a user in Active Directory?

我正在使用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();

在单个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);
}

如果您使用的是.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中与用户和群组玩游戏变得非常容易!

看看他的文章: 使用DirectoryEntry和DirectorySearcher检索用户SID

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM