【问题标题】:Check if the User is valid user on Domain - Active Directory检查用户是否是域上的有效用户 - Active Directory
【发布时间】:2016-03-17 07:50:14
【问题描述】:

很多人发布了有关此问题的信息,但无法进行任何工作。我正在尝试在 Asp.net 表单上获取用户的用户名和密码(用户在域中登录其计算机时使用的用户名和密码相同)。

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

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

这是我第一次通过 Active Directory 进行用户身份验证,但不知道我还需要什么才能成功验证来自 Active Directory 的用户。

我是否需要在 PrincipalContext 对象的 Container 和 Name 属性中提供信息,因为它似乎为空。

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

【问题讨论】:

  • 也许你必须在域名前面加上用户名,即"DOMAIN\\" + txtUsername.Text.Trim()

标签: c# asp.net active-directory


【解决方案1】:

您有正确的域吗?也许它的名称与“DOMAIN”不同,试试这个:

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

【讨论】:

  • 其实域名是“DOMAIN”。 Environment.UserDomain 也返回了相同的结果。没用,结果一样
  • 这很奇怪。你的方法确实有效。我尝试输入我的电子邮件地址 abc.xyz@example.com 而不是用户名。它验证了我的凭据,但我的实际电子邮件是 abc.xyz-e@example.com。我错过了什么。
  • 试试var me = Principal.FindByIdentity(new PrincipalContext(ContextType.Domain), WindowsIdentity.GetCurrent().User.Value); 并检查NameSamAccountNameUserPrincipalName 等属性,如果您发现任何差异。
【解决方案2】:

请使用以下功能

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;
}

【讨论】:

  • 在消息中我收到“登录失败:未知用户名或密码错误。”。我使用的用户名和密码与我登录计算机时使用的用户名和密码相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多