【问题标题】:ASP.Net Core : get members of Active Directory groupASP.Net Core:获取 Active Directory 组的成员
【发布时间】:2017-11-06 14:14:03
【问题描述】:

我想知道如何获取 AD 组的成员列表。

检查用户输入的密码是否正确可以正常工作。为此,我使用的是 Novell 的 Ldap.NetStandard:

private bool IsUserValid(string userName,string userPassword)
{
    try{
        using (var connection = new LdapConnection { SecureSocketLayer = false })
        {
            connection.Connect("test.local", LdapConnection.DEFAULT_PORT);
            connection.Bind(userDn, userPassword);

            if (connection.Bound)
            {
                return true;
            }
        }
    }
    catch (LdapException ex)
    {
        Console.WriteLine(ex.Massage);
    }

    return false;
}

我现在想要的是这样的:

bool isUserInGroup("testUser","testGroup");

问题是我的方法无法正常工作:

public bool IsUserMemberOfGroup(string userName,string groupName)
{
    var ldapConn = GetConnection();

    var searchBase = "";
    var filter = $"(&(objectClass=group)(cn={groupName}))";
    var search = ldapConn.Search(searchBase, LdapConnection.SCOPE_BASE, filter, null, false);
    while (search.hasMore())
    {
        var nextEntry = search.next();
        if (nextEntry.DN == userName)
            return true;                    
    }

    return false;
}

无论我在做什么,我都没有从我的Ldap.Search() 那里获得任何价值...

【问题讨论】:

  • 不要在开始搜索前先指定搜索库?即var searchBase = "DC=test,DC=local";
  • @DavidLiang 也尝试过。结果还是一样……
  • aww 要知道发生了什么并不容易,因为我不能过多询问您的 AD 设置。我可以告诉你我的设置是什么。请看我的回答here。
  • @DavidLiang 非常感谢,我会看看!

标签: asp.net asp.net-mvc asp.net-core active-directory ldap


【解决方案1】:

现在有一个适用于 .NET Core 2 的 System.DirectoryServices.AccountManagement 实现。它可以通过 nuget 获得。

有了这个包,你可以做这样的事情:

        using (var principalContext = new PrincipalContext(ContextType.Domain, "YOUR AD DOMAIN"))
        {
            var domainUsers = new List<string>();
            var userPrinciple = new UserPrincipal(principalContext);

            // Performe search for Domain users
            using (var searchResult = new PrincipalSearcher(userPrinciple))
            {
                foreach (var domainUser in searchResult.FindAll())
                {
                    if (domainUser.DisplayName != null)
                    {
                        domainUsers.Add(domainUser.DisplayName);
                    }
                }
            }
        }

这将在您的域中搜索用户。搜索您的组几乎相同。我过去搜索广告的方式(我的问题中的描述)现在已经过时了:

检查用户输入的密码是否正确工作完美 美好的。为此,我使用的是 Novell 的 Ldap.NetStandard:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多