我对 c# 和 LDAP 很陌生,我正在做这个项目,以便我可以通过更多的动手方法来了解它们。
我要创建的是一个登录表单,它有一个登录点击事件,在用户使用 LDAP 通过活动目录输入用户名和密码后,该事件将验证用户名和密码。
我已经阅读了 .NET Framework 3.5 中的管理目录安全主体,以便能够更好地理解这个主题,并且我在这里也经历了类似的主题,这个主题涉及验证本身(c# - Validate a username and password against Active Directory?)和这个验证用户名(c#针对通过LDAP的Active Directory)
从第一个链接的主题中,我了解到以下代码应该可以解决用户名和密码的身份验证问题:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.string.com/OU=Users, Dc=example, Dc= string, DC=com"))
{
bool isValid = pc.ValidateCredentials(User, Password);
}
因此,我将其合并到点击事件的方法如下:
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.string.com/OU=Users, Dc=example, Dc= string, DC=com"))
bool isValid = pc.ValidateCredentials(User, Password);
if(isValid)
{
Main m = new Main();
this.Close();
m.Show();
}
else
{
MessageBox.Show("Invalid Username and/or Password","Error!");
textBox1.Clear();
textBox2.Clear();
textBox1.Focus();
}
这给了我嵌入式语句的布尔错误。我尝试了从第二篇文章中读到的另一种方法,即使用仅验证用户名的代码:
PrincipalContext pc = new PrincipalContext(ContextType.Domain, "LDAP://example.com/OU=Computers,OU=Users,dc=example,dc=com");
UserPrincipal user = UserPrincipal.FindByIdentity(pc, "username");
bool userExists = (user != null);
但我发现我无法使用此方法验证密码,因为UserPrincipal.FindByPassword不存在。
我也尝试过这种方式,但是.Password不存在:
PrincipalContext pc = new PrincipalContext(ContextType.Domain,"LDAP://....");
UserPrincipal qbeUser = new UserPrincipal(pc);
qbeUser.EmployeeId = User;
//.Password does not exist
UserPrincipal qbePassword = new UserPrincipal(pc);
qbePassword.Password = Password;
// create your principal searcher passing in the QBE principal
PrincipalSearcher srchUser = new PrincipalSearcher(qbeUser);
PrincipalSearcher srchPass = new PrincipalSearcher(qbePassword);
// try to find that user and password
UserPrincipal founduser = srchUser.FindOne() as UserPrincipal;
UserPrincipal foundpass = srchPass.FindOne() as UserPrincipal;
if (founduser != null)
{
if (foundpass != null)
{
Main m = new Main();
this.Close();
m.Show();
}
else
{
MessageBox.Show("Password Not Valid.");
textBox2.Clear();
textBox2.Focus();
}
}
else
{
MessageBox.Show("Username Not Valid.");
textBox1.Clear();
textBox1.Focus();
}
有人可以请指导我如何正确处理这个问题。
先感谢您。