这是我的登录脚本。我有两个用户20002143,60000027第一个将进行身份验证并重定向为脚本,第二个将进行身份验证并保持在同一页面上。我无法弄清楚为什么。我在这段代码中插入了断点,它告诉我它验证但是为什么登录页面只是重新加载:
public bool AuthenticateActiveDirectory(string Domain, string EmployeeID, string Password)
{
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + Domain, EmployeeID, Password);
object nativeObject = entry.NativeObject;
return true;
}
catch
{
return false;
}
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string Domain = "domain.local";
string EmployeeID = txtUserID.Text;
string Password = txtPassword.Text;
string ADStatus = null;
if (AuthenticateActiveDirectory(Domain, EmployeeID, Password) == true)
{
ADStatus = "Success";
Session["SessionLoginStatus"] = ADStatus;
Response.Redirect("Intro.aspx?redir=Success&userid=" + EmployeeID);
}
else
{
ADStatus = "Failure";
Session["SessionLoginStatus"] = ADStatus;
lblADError.Visible = true;
lblADError.Text = "Please Check Your Password<br />";
}
}
这是另一部分。如果我使用URL以第二个empID
错误地登录https://www.site.com/folder/intro.aspx?redir=Success&userid=60000027
它会将我重定向回登录但这也没有意义,因为Intro.aspx登录检查是这样的脚本。
//checking to see if user logged in
if ((ADStatus == "Success") && (UserID.Length >= 8))
{
}
if ((ADStatus == null) || (UserID.Length < 8))
{
ADStatus = "Failure";
Session["SessionLoginStatus"] = ADStatus;
Response.Redirect("https://www.site.com/folder/userlogin.aspx");
}
else if (ADStatus == "Failure")
{
ADStatus = "Failure";
Session["SessionLoginStatus"] = ADStatus;
Response.Redirect("https://www.site.com/folder/userlogin.aspx");
}
我在这里遗漏或做错了什么?
被修改
问题是由第二页上的逻辑引起的,如果用户的ID与SQL表中定义的用户列表不匹配,则会将用户返回到登录名。
答案 0 :(得分:2)
无论是形状还是论坛,您都在对LDAP服务器上的用户进行身份验证。实际上,您的身份验证方法永远不会返回false,因为entry
永远不会为null,DirectoryEntry
的构造函数永远不会抛出异常。
话虽如此,请检查您是否正确输入凭据(因为我知道您不是)。查看您的in语句中的重定向。由于您的身份验证方法始终返回true,因此它会尝试重定向每个人,但是会因为您使用无效凭据而失败。
那么,您如何使用PrincipalContext实际验证用户身份。以下是DirectoryEntry question之间的两点解释。
顺便说一下,您想要使用PrincipalContext.ValidateUser来电返回的布尔值。