c#检查一个组的用户成员?

时间:2010-12-06 11:51:32

标签: c# authentication active-directory authorization

我有一个代码,用于检查用户是否是AD的成员,工作得很好,

现在我想添加检查用户是否也是群组成员的可能性!

我需要修改什么来实现这一点,我做了一些工作,但它失败了!

所以这是我的代码:

        //Authenticate a User Against the Directory
        private bool Authenticate(string userName,string password, string domain)
        {

            if (userName == "" || password == "")
            {
                return false;
            }

            bool authentic = false;
            try
            {
                DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,userName, password);
                object nativeObject = entry.NativeObject;
                authentic = true;
            }
            catch (DirectoryServicesCOMException) { }
            return authentic;
        }

我想这样做:

private bool Authenticate(string userName,string password, string domain, string group)

3 个答案:

答案 0 :(得分:24)

这在Windows XP或更早版本中不可用。

无论如何,为了检查组成员身份,您可以使用以下代码:

bool IsInGroup(string user, string group)
{
    using (var identity = new WindowsIdentity(user))
    {
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
}

答案 1 :(得分:7)

在ASP.Net中,您将使用Page.User.IsInRole("RoleName")或在Windows中使用System.Threading.Thread.CurrentPrincipal.IsInRole("RoleName")

答案 2 :(得分:6)

我用这段代码解决了这个问题

public bool AuthenticateGroup(string userName, string password, string domain, string group)
    {


        if (userName == "" || password == "")
        {
            return false;
        }

        try
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
            mySearcher.Filter = "(&(objectClass=user)(|(cn=" + userName + ")(sAMAccountName=" + userName + ")))";
            SearchResult result = mySearcher.FindOne();

            foreach (string GroupPath in result.Properties["memberOf"])
            {
                if (GroupPath.Contains(group))
                {
                    return true;
                }
            }
        }
        catch (DirectoryServicesCOMException)
        {
        }
        return false;
    }

它适用于我,它可以用于不属于域控制器/ Active Directory的计算机

谢谢大家的帮助