1

我们使用 LDAP 服务器来验证我们的用户。因为服务器是远程访问的,所以我们的网络服务器很可能会在线,而 LDAP 服务器将停机进行维护。

现在,当 ldap_bind 失败时,我认为这是一个用户身份验证问题(错误的用户名/密码)并且我向用户显示了一条消息。但是,如果与 LDAP 服务器的连接失败(并且不一定是凭据问题),那么我最终会遇到数百名用户告诉我他们的密码不起作用,而这不是问题。

我怎样才能从中恢复过来?ldap_connect 似乎在所有情况下都成功,因为连接被推迟到 ldap_bind 被调用。ldap_bind 的返回值是一个简单的布尔值,虽然 PHP 显示的警告消息提供了丰富的信息,但这对我的代码没有太大帮助。

4

2 回答 2

3

使用ldap_errno().

http://php.net/manual/en/function.ldap-errno.php

可能的错误代码列表: http ://www.php.net/manual/en/function.ldap-errno.php#20665

于 2012-04-10T21:07:18.773 回答
0

请求/响应框架

LDAP 交互由请求和响应组成。响应将始终包含结果代码。当请求为绑定时,非零结果码表示发生错误,例如,十进制结果码49表示提供的凭据不正确(在某些情况下出于安全原因,输入时可以返回此结果码不存在以误导攻击者)。应用程序编码人员应通过使用已知的正确工具(例如ldapsearch. 例如,尝试:

ldapsearch -h hostname -p port \
   -D distinguished-name-here -w <password> -b '' -s base '(&)' 

上述搜索建立了一个连接,将连接的授权状态更改为使用给定凭据指定的身份验证 ID,然后从根 DSE 检索属性。如果此搜索成功,则应用程序编码人员可以确信凭证是正确的。

网络超时

应用程序编码人员应始终使用支持网络超时概念的 API,因为超时不是 LDAP 协议的一部分——搜索有时间限制(参见 RFC4511),但协议中没有网络超时。如果 LDAP API 不支持网络超时,则不应考虑将该 API 用于重要的 LDAP 客户端工作。

也可以看看

于 2012-04-11T09:05:30.683 回答