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只会有有效的凭据?
答案 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方法绑定到构造函数中指定的服务器。
没有提及正在使用的构造函数中指定的容器,并且您发现它也没有被检查。