为啥我的 LDAP 重定向脚本对一个用户失败?

Posted

技术标签:

【中文标题】为啥我的 LDAP 重定向脚本对一个用户失败?【英文标题】:Why does my LDAP redirect script fail with one user?为什么我的 LDAP 重定向脚本对一个用户失败? 【发布时间】:2014-10-16 21:00:57 【问题描述】:

这是我的登录脚本。我有两个用户 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 表中定义的用户列表不匹配,则第二页上的逻辑会导致用户返回登录。

【问题讨论】:

尝试比较 Fiddler 中的请求及其响应,看看是否有任何线索;或者如果您不知道如何使用 Fiddler 自己调试数据,您至少可以与我们共享数据。 我打开了 fiddler,但在点击和离开登录页面时它只显示 Tunnel to www.site.com 你能复制/粘贴两个请求的原始响应吗? 伙计们,如果我对这个问题失去声誉,我完全理解。该问题是由第二页上的参数引起的,如果 ID 与 SQL 表中的用户列表不匹配,该参数会将用户返回登录。 只要充分解释/提及(您甚至可能想编辑帖子),就没有理由因为在诚实问题上寻求帮助而失去声誉。 【参考方案1】:

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

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

那么,您如何使用PrincipalContext 实际验证用户。这里用DirectoryEntry question来解释一下两者之间的关系。

顺便说一句,您将要使用PrincipalContext.ValidateUser 调用返回的布尔值。

【讨论】:

以上是关于为啥我的 LDAP 重定向脚本对一个用户失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥打印的 Inline::Python 函数重定向失败?

Linux 第三天 重定负管道符环境变量

shell脚本基础之详解基本脚本的构建

linux脚本后台运行失败

Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)

WordPress对url做重定向处理