ASP.Net Core:获取Active Directory组的成员

时间:2017-11-06 14:14:04

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

我想知道如何获得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()取回任何价值......

1 个答案:

答案 0 :(得分:0)

.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: