我正在为我们的 Web 应用程序开发 LDAP 身份验证支持。在测试此功能时,我注意到一个非常奇怪的行为:用户可以使用正确的密码或不使用密码进行身份验证。如果输入了错误的密码,身份验证将失败。
起初我以为我可能遗漏了代码中的某些内容,但后来我决定使用一些桌面客户端进行测试。我尝试了 Windows Sysinternals 中的“Active Directory Explorer”,令人惊讶的是,它导致了相同的行为。
对此有什么想法吗?正如您所猜测的,我们正在使用 Active Directory。如果我需要了解有关 Active Directory 配置的更多详细信息,请告诉我。
答案1
专有名称可能无法使用零长度密码进行“身份验证”。简单的 BIND LDAP 操作具有以下可能性:
- 没有 DN,没有密码(
anonymous
,不进行身份验证) - DN,无密码(
unauthenticated
,不进行身份验证) - DN,密码(如果凭证匹配,则认证成功)
- 没有 DN、密码(标准中未定义服务器行为)
答案2
我似乎在这里找到了解释:LDAP:简单身份验证。 它指出:
注意:如果您向 Context.SECURITY_CREDENTIALS 环境属性提供空字符串、空字节/字符数组或 null,则身份验证机制将为“无”。这是因为 LDAP 要求密码非空才能进行简单身份验证。如果未提供密码,协议会自动将身份验证转换为“无”。