为什么我的LDAP重定向脚本会因一个用户而失败?

时间:2014-10-16 21:00:57

标签: c# asp.net webforms ldap directoryservices

这是我的登录脚本。我有两个用户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表中定义的用户列表不匹配,则会将用户返回到登录名。

1 个答案:

答案 0 :(得分:2)

无论是形状还是论坛,您都在对LDAP服务器上的用户进行身份验证。实际上,您的身份验证方法永远不会返回false,因为entry永远不会为null,DirectoryEntry的构造函数永远不会抛出异常。

话虽如此,请检查您是否正确输入凭据(因为我知道您不是)。查看您的in语句中的重定向。由于您的身份验证方法始终返回true,因此它会尝试重定向每个人,但是会因为您使用无效凭据而失败。

那么,您如何使用PrincipalContext实际验证用户身份。以下是DirectoryEntry question之间的两点解释。

顺便说一下,您想要使用PrincipalContext.ValidateUser来电返回的布尔值。