为啥我的 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 重定向脚本对一个用户失败?的主要内容,如果未能解决你的问题,请参考以下文章