我有一个PHP脚本,可以执行LDAP连接,绑定和搜索。它与大多数Active Directory服务器配合良好,但是我们的一个客户端遇到了问题。脚本返回
Strong(er) authentication required.
尝试ldap_bind时出错。
我所做的所有搜索都指向两个可能的问题:
- 我必须
LDAP_OPT_PROTOCOL_VERSION
设置为3
- 我以前做过,所以这不是我的问题。 - AD服务器配置为使用SSL身份验证 - 但我们的客户坚持认为它是默认的Windows 2008 R2服务器安装,并且肯定不会默认为SSL。
发生此错误的其他原因可能是什么?
更新
这是活动目录服务器上需要的SSL...
如果 Active Directory 服务器需要,则必须使用 ldaps://
。如果是证书颁发机构无效的问题,您可以通过发出以下命令来忽略窗口中的有效性
putenv('LDAPTLS_REQCERT=never');
在你的 PHP 代码中。在 *nix 中,您需要编辑/etc/ldap.conf
以包含
TLS_REQCERT never
对于其他常见问题,您可以参考我在PHP无法连接到LDAP Oracle Directory Server Enterprise Edition上的帖子
。有关工作示例代码,您可以查看: 使用 PHP 安全绑定到 Active Directory 的问题
我遇到了同样的问题,似乎我的bind_rdn
中有拼写错误,因此请确保凭据正确。
如果您尝试使用以下方法更新 LDAP 实体,也会显示消息"需要强(er)身份验证":
- ldap_modify
- ldap_mod_replace
- ldap_modify_batch
不使用可选参数调用绑定函数:
string $bind_rdn = NULL [, string $bind_password = NULL
此代码将不起作用:
$ldap = ldap_connect($ldap_url);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap);
$userdata=array();
$userdata['userattribute'][0]='test';
ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);
此代码有效,请注意不同的调用绑定函数:
$ldap = ldap_connect($ldap_url);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap,'cn=admin,dc=example,dc=com','secretpassword');
$userdata=array();
$userdata['userattribute'][0]='test';
ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);
这个答案似乎很满,虽然很短。它涵盖了有关如何处理错误的两个选项。