首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从LDAP查询用户组

从LDAP查询用户组
EN

Stack Overflow用户
提问于 2011-03-10 05:01:38
回答 6查看 25.6K关注 0票数 10

如何从C# .NET的活动目录中获取用户的用户组。在我的场景中,我希望将用户名传递给从LDAP Active directory查询的方法,并告诉我我的用户是此用户组的成员。在这方面请帮帮我

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-10 05:45:29

如果您使用的是.NET 3.5或更高版本,则还可以使用新的System.DirectoryServices.AccountManagement (S.DS.AM)名称空间。

使用此命令,您可以执行以下操作:

代码语言:javascript
运行
复制
// create context for domain
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find the user
UserPrincipal up = UserPrincipal.FindByIdentity(ctx, "YourUserName");

if(up != null)
{
    // get groups for that user
    var authGroups = up.GetAuthorizationGroups();
}

阅读有关新的S.DS.AM名称空间的更多信息:

Managing Directory Security Principals in the .NET Framework 3.5

票数 12
EN

Stack Overflow用户

发布于 2011-03-10 05:08:41

研究一下如何使用System.DirectoryServices名称空间。您可以使用DirectorySearcher查找用户。拥有该用户的DirectoryEntry对象后,请执行以下操作:

代码语言:javascript
运行
复制
public List<string> GetMemberOf(DirectoryEntry de)
{
  List<string> memberof = new List<string>();

  foreach (object oMember in de.Properties["memberOf"])
  {
    memberof.Add(oMember.ToString());
  }

  return memberof;
}

这将返回一个字符串列表,这些字符串是用户所属的组名。

当然,您还可以进一步改进以包含DirectorySearcher代码,这样就可以只将samAccountName传递给函数。

票数 4
EN

Stack Overflow用户

发布于 2011-08-12 21:50:43

试试这个。

代码语言:javascript
运行
复制
public override string[] GetRolesForUser(string username)
    {
    var allRoles = new List<string>();
    var root = new DirectoryEntry(WebConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString,
                                    ConnectionUsername,
                                    ConnectionPassword);

    var searcher = new DirectorySearcher(root,
                                        string.Format(CultureInfo.InvariantCulture, "(&(objectClass=user)({0}={1}))",
                                                                                    AttributeMapUsername,
                                                                                    username));

    searcher.PropertiesToLoad.Add("memberOf");
    SearchResult result = searcher.FindOne();
    if (result != null && !string.IsNullOrEmpty(result.Path))
    {
        DirectoryEntry user = result.GetDirectoryEntry();
        PropertyValueCollection groups = user.Properties["memberOf"];
        foreach (string path in groups)
        {
            string[] parts = path.Split(',');
            if (parts.Length > 0)
            {
                foreach (string part in parts)
                {
                    string[] p = part.Split('=');
                    if (p[0].Equals("cn", StringComparison.OrdinalIgnoreCase))
                    {
                        allRoles.Add(p[1]);
                    }
                }
            }
        }
    }
    return allRoles.ToArray();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5252108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档