检查用户是否为域上的有效用户 - Active Directory

时间:2015-12-11 11:49:48

标签: c# asp.net active-directory

很多人发布了这个但却无法得到任何工作。我试图在Asp.net表单上获取用户的用户名和密码(用户用来登录域中计算机的用户名和密码)。

我正在使用PrincipalContext来验证用户。

enter image description here

虽然我提供了有效的用户名和密码,但pc.ValidateCredentials始终返回false。

这是我第一次通过Active Directory进行用户身份验证,并且不知道从Active Directory成功验证用户还需要什么。

我是否需要在PrincipalContext对象的Container和Name属性中提供信息,因为它看起来是null。

enter image description here

目前,我正在域上的本地计算机上运行此代码。

2 个答案:

答案 0 :(得分:4)

你有正确的域名吗?也许它被称为与'DOMAIN'不同,试试这个:

  private bool Authenticate(string user, string password)
  {
        using ( var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName) ) {
           return context.ValidateCredentials(user.Trim(), password.Trim());
        }
  }

答案 1 :(得分:0)

请使用以下功能

private bool AuthenticateAD(string userName, string password, string domain, out string message)
{

    message = "";       

    DirectoryEntry entry = new
        DirectoryEntry("LDAP://" + domain, userName, password);
    try
    {
        object obj = entry.NativeObject;
        DirectorySearcher search = new DirectorySearcher(entry);
        search.Filter = "(SAMAccountName=" + userName + ")";
        search.PropertiesToLoad.Add("cn");
        SearchResult result = search.FindOne();
        if (null == result)
        {
            return false;
        }           

    }
    catch (Exception ex)
    {
        message = ex.Message;
        return false;
        //throw new Exception("Error authenticating user. " + ex.Message);
    }

    return true;
}