PrincipicalContext ActiveDirectory验证容器中的用户

时间:2016-10-18 15:12:12

标签: c# validation ldap

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain,"domain","CN=GroupName, DC = domainc, DC = local")) 
{
    // validate the credentials
    try
    {
        bool isValid = pc.ValidateCredentials("userName", "password");
    }
    catch (Exception e)
    {

    }
}

在PrincipialContext构造函数中,如果我只输入域名,我就可以验证用户。如果我输入CN =" BadGroupNameDoesNotExist"它仍然将用户验证为true。看来,我为CN所做的并不重要。

为什么?我是活跃目录的新手,如果他属于那个组但是看起来不是真的,那么投入有效的CN只会有有效的凭据?

2 个答案:

答案 0 :(得分:0)

您可以尝试创建一个utils类并添加以下方法等。

using System.Security;
using System.DirectoryServices.AccountManagement;
public struct Credentials
{
    public string Username;
    public string Password;
}
public class Domain_Authentication
{
    public Credentials Credentials;
    public string Domain;
    public Domain_Authentication(string Username, string Password, string SDomain)
    {
        Credentials.Username = Username;
        Credentials.Password = Password;
        Domain = SDomain;
    }
    public bool IsValid()
    {
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, Domain))
        {
            // validate the credentials
            return pc.ValidateCredentials(Credentials.Username, Credentials.Password);
        }
    }
}

答案 1 :(得分:0)

您是正确的,ValidateCredentials不会关注容器名称/ OU。

the documentation中的备注部分都包括

  

ValidateCredentials方法绑定到构造函数中指定的服务器。

没有提及正在使用的构造函数中指定的容器,并且您发现它也没有被检查。