2014-10-16 17 views
1

这是我的登录脚本。我有两个用户20002143和60000027第一个将验证和重定向为脚本,第二个验证并保持在同一页面上。我无法弄清楚为什么。我已插入断点遍布这个代码,并告诉我,它验证,但为什么是登录页面只是重装:为什么我的LDAP重定向脚本失败,只有一个用户?

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

尝试比较请求和他们在提琴手的反应,看看是否给出任何线索;或者如果您不知道如何使用Fiddler自行调试,至少可以与我们分享数据。 – 2014-10-16 21:07:30

+0

我已经打开了提琴手,但它只能说打开和离开登录页面 – Skullomania 2014-10-16 21:26:10

+0

时,您可以复制/粘贴这两个请求的原始响应时www.site.com隧道? – 2014-10-16 21:26:41

回答

2

绝不会在LDAP服务器上验证用户的形状或论坛。事实上,您的身份验证方法永远不会返回false,因为entry永远不会为空,并且DirectoryEntry的构造函数永远不会抛出异常。

这样说的话,请检查您是否正确输入凭据(因为我知道您不是)。看看你的声明中的重定向。由于您的身份验证方法始终返回true,因此会尝试重定向每个人,但任何人都会失败,因为您使用的凭据无效。

那么,你如何使用PrincipalContext实际验证用户身份。这里有一个与这DirectoryEntry question这两个有点解释。

顺便说一句,你打算使用由PrincipalContext.ValidateUser返回的bool调用。

+0

谢谢@Netscape。我会重写它 – Skullomania 2014-10-16 21:47:16

相关问题