使用C#检查Active Directory中是否存在UserID

27

我们如何检查用户ID是否存在于Active Directory中。

我有LDAP字符串和UserID,我能否找到该UserID是否存在于Active Directory中。 我将在ASP.NET Web应用程序(.NET 3.5)中使用此方法。

2个回答

50

您可以按照以下方式进行操作(将域替换为您正在进行身份验证的域或完全删除该参数):

public bool DoesUserExist(string userName)
{
    using (var domainContext = new PrincipalContext(ContextType.Domain, "DOMAIN"))
    {
        using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, userName))
        {
            return foundUser != null;
        }
    }
}

为了检查用户是否存在,可以使用System.DirectoryServices.AccountManagement命名空间和程序集。你可以在http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.aspx上找到更多信息。你可能还想进一步了解PrincipalContext,因为它有一些有趣的方法用于验证用户凭据等。

3
+1 我会做的事情,只是更好地解释一下。此外,您可以省略域名以使用本地域 - 如果您只有一个域并且不需要知道其名称,则非常方便。 - Grhm
谢谢,它很有帮助。新的命名空间System.DirectoryServices.AccountManagement很有用!但是我对第二个参数“DOMAIN”有点困惑...我们需要提供它吗?如果我们提供它,它是Active Directory的域名吗?... - msbyuva
如果你想连接到系统的默认域,那么你可以删除该参数。否则,你需要指定要连接的域。 - Joshua Rodgers
不要忘记接受答案,如果它们是你寻找的答案。 :) - Joshua Rodgers

8
我会使用 System.DirectoryServices.AccountManagement 命名空间。
string UserID = "grhm";
bool userExists = false;

using (var ctx = new PrincipalContext(ContextType.Domain))
{
    using (var user = UserPrincipal.FindByIdentity(ctx, UserID))
    {
        if (user != null)
        {
            userExists = true;
            user.Dispose();
        }
    }
}

有关更多信息,请参见http://msdn.microsoft.com/zh-cn/library/bb344891.aspx


你可以使用其他参数来指定你想要连接的域 - 就像其他答案中所述。我看到Joshua已经在上面解释过了... - Grhm
你声明了 user,但我从未看到声明 usr。它们应该是同一个变量吗? - Brian J
@BrianJ:是的,它们应该是。已经编辑修复了。 - Grhm
你不需要使用dispose(),因为Using()会自动处理。 - Fandango68
如果它从IIS运行,那么这也不起作用,因为运行Web服务的IIS_USER或其他帐户也需要添加到AD中,并赋予高权限以运行AD方法。 - Fandango68
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接