c# - 如何在 LDAP 中进行身份验证?

标签 c# .net active-directory ldap

我正在尝试使用 .NET 中的 LDAP 创建一个简单的身份验证系统。 我正在检查 .NET 中的一些命名空间,并简单地制作如下标准代码片段。

DirectoryEntry de = new DirectoryEntry(path,username,password);

DirectorySearcher s = new DirectorySearcher(de);
s.Filter = "(&(cn=" + username2 + "))";

SearchResult result = s.FindOne();
if (result != null) {
    Console.WriteLine("User exists");
} else {
    Console.WriteLine("User does not exist");
}

我有一个管理员用户名和密码,usernamepassword,我用它来验证客户端应用程序。我有第二个用户名和密码,username2password2 需要在 LDAP 中检查才能登录。

username 是管理员帐户,username2 只是 LDAP 中的一个用户。那么如何查看username2的密码呢?

最佳答案

一种稍微倒退(且笨拙)的方法是以用户身份登录并尝试检索某些内容,然后将异常视为无效密码:

static bool CheckUser(string userName, string password) 
{
    var adSettings = ConfigurationManager.ConnectionStrings["ActiveDirectory"];
    if (adSettings == null ||
        string.IsNullOrWhiteSpace(adSettings.ConnectionString))
    {
        return false;
    }

    try
    {
        using (var de = new DirectoryEntry(adSettings.ConnectionString, userName, password))
        {
            // This should throw an exception if the password is wrong
            object nativeObject = de.NativeObject;
        }
    }
    catch (DirectoryServicesCOMException)
    {
        // Wrong password
        return false;
    }
    catch (System.Runtime.InteropServices.COMException)
    {
        // Can't connect
        return false;
    }

    return true;
}

关于c# - 如何在 LDAP 中进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361021/

相关文章:

c# - SQL 正确地将整数格式化为日期

c# - 是否可以从 SqlDbType.Xml 类型的输出 SqlParameter 创建 XmlReader?

ruby-on-rails - 使用 ID 以外的参数查找模型

windows - 获取AD计算机不像专有名称

c# - HttpWebRequest SSL 仅适用于某些网站

c# - P/Invoke 调用刚刚停止

c# - 我在这个谓词链中缺少什么?

c# - SemaphoreSlim 使用限制

.net - 在运行时将 ADO.Net DataSet 指向不同的数据库?

.net - JAX-WS IBM 客户端使用带有 Active Directory 身份验证 (NTLM) 的 .Net WS