在 C# 中搜索 Active Directory 并使用当前用户进行身份验证

Posted

技术标签:

【中文标题】在 C# 中搜索 Active Directory 并使用当前用户进行身份验证【英文标题】:Searching through Active Directory in C# and authenticate with current User 【发布时间】:2015-01-12 12:09:39 【问题描述】:

我想做什么:

用户使用他的用户凭据登录到我的应用程序。表单只有一个 pNumber 作为输入,应用程序应该搜索活动目录以找到具有该号码的用户并自动填写不同的输入字段(在此示例中只有姓名和电子邮件)。

我已经拥有的(C# 代码,.Net 4.0):

public static string[] getUser(string pNumber) 
        string[] user = new string[4];
        NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;
        string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

        string DomainPath = "LDAP://DC=****,DC=com";
        string strAccountId = userName;
        string strPassword = "******";
        DirectoryEntry adsEntry = new DirectoryEntry(DomainPath, strAccountId, strPassword);
        DirectorySearcher adsSearcher = new DirectorySearcher(adsEntry);

        adsSearcher.Filter = "(pNumber=" + pNumber + ")";

        SearchResult adsSearchResult = adsSearcher.FindOne();

        if (adsSearchResult != null) 
            user[0] = adsSearchResult.Properties["sAMAccountName"][0].ToString();
            user[1] = adsSearchResult.Properties["mail"][0].ToString();
        

        return user;
    

如果我输入 strAccountId 和 strPassword 的值,我知道可以访问 AD,这可以正常工作。但这只是一种解决方法。我想使用当前用户凭据向 AD 进行身份验证。我可以获取当前用户名,但我认为无法获取密码。所以我研究了使用 DirectoryEntry here 进行身份验证的其他可能性。 (我真正没有得到的是 DirectoryEntry(Object) 构造函数)

我的问题:

我可以使用 C# 使用当前用户凭据搜索 AD 吗?

【问题讨论】:

“我没有真正得到的是 DirectoryEntry(Object) 构造函数”:你能解释一下你的意思吗?看起来正朝着正确的方向前进,并有小挫折。这个链接有帮助吗:msdn.microsoft.com/en-US/library/ms180885(v=vs.80).aspx 【参考方案1】:

DirectorySearcher ds = new DirectorySearcher(de);

如果当前用户有访问权限,如果没有,你会得到一个例外。

【讨论】:

嗨,Alfredo,看起来 OP 正在使用 DirectorySearcher 对象。您的回答如何帮助按照他们的要求向 AD 进行身份验证?

以上是关于在 C# 中搜索 Active Directory 并使用当前用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中验证远程 Active Directory 的用户

如何在 C# 中获取当前用户的 Active Directory 详细信息

如何在 C# 中使用 AD 组名称查找 Active Directory 组电子邮件地址

C# 中的 LDAP 和 Active Directory 身份验证

如何在 php 中使用 LDAP 从 Active Directory 搜索和更新用户数据?

C# 将用户添加到 Active Directory - 指定给目录服务的属性语法无效