需要 PHP 强(er) 身份验证


PHP Strong(er) authentication required

我有一个PHP脚本,可以执行LDAP连接,绑定和搜索。它与大多数Active Directory服务器配合良好,但是我们的一个客户端遇到了问题。脚本返回

Strong(er) authentication required.

尝试ldap_bind时出错。

我所做的所有搜索都指向两个可能的问题:

  1. 我必须LDAP_OPT_PROTOCOL_VERSION设置为3 - 我以前做过,所以这不是我的问题。
  2. 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);

这个答案似乎很满,虽然很短。它涵盖了有关如何处理错误的两个选项。