2

我有活动目录的用户名和密码,我想使用 C# 登录活动目录。如何在 Windows 窗体中执行此操作?

4

4 回答 4

6

这个问题来自几年前,我希望这个答案可以帮助未来的人。这对我有用:

添加这些参考:

  • 使用 System.DirectoryServices;
  • 使用 System.DirectoryServices.AccountManagement;

之后,您可以在您的应用程序中使用此代码:

   PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOUR DOMAIN");
   bool Valid = pc.ValidateCredentials("User", "password");

如果登录正常,名为Valid的变量将显示一个True值。

欲了解更多信息,您可以访问此页面。该页面来自这里,stackOverFlow,它将向您显示很多有关以下内容的信息:“使用 MS Active Directory 登录”

于 2014-02-18T17:20:46.470 回答
4

解决方案

连接到 Active Directory 非常简单。

您必须使用该DirectoryEntry对象(在命名空间中System.DirectoryServices)。

此对象的构造函数在参数中采用三个字符串:

  • Active Directory 的路径。此路径具有以下格式:LDAP://your-name-AD
  • 连接的用户名
  • 对应的密码

例子

using System.DirectoryServices;

try
{
   DirectoryEntry Ldap = new DirectoryEntry("LDAP://your-name-AD", "Login", "Password");
}
catch(Exception Ex)
{
   Console.WriteLine(Ex.Message);
}
于 2012-07-26T08:24:27.180 回答
4

你去吧。此方法username/password针对 Active Directory 进行验证,并且很长一段时间以来一直是我的功能工具箱的一部分。

//NOTE: This can be made static with no modifications
public bool ActiveDirectoryAuthenticate(string username, string password)
{
    bool result = false;
    using (DirectoryEntry _entry = new DirectoryEntry())
    {
        _entry.Username = username;
        _entry.Password = password;
        DirectorySearcher _searcher = new DirectorySearcher(_entry);
        _searcher.Filter = "(objectclass=user)";
        try
        {
            SearchResult _sr = _searcher.FindOne();
            string _name = _sr.Properties["displayname"][0].ToString();
            result = true;
        }
        catch
        { /* Error handling omitted to keep code short: remember to handle exceptions !*/ }
    }

    return result; //true = user authenticated!
}

显然,执行此操作的软件必须在域内的计算机上运行(否则您将没有 Active Directory 来验证您的凭据)。

于 2012-07-26T08:49:00.957 回答
0

更简短的答案是添加参考 System.DirectoryServices.AccountManagement

然后使用 UserPrincipal.Current.Context.ValidateCredentials("username", "password");

但我想您将需要加入您要验证的域。

于 2016-01-12T06:05:45.203 回答