我知道我的错误将非常简单,但是我试图找到问题,但我没有看到它,也许您可​​以帮助我...。

我正在尝试使用php创建一个函数,因此我可以连接到LDAP并找到所需的信息。

我的PHP代码如下:

$ldapconfig['host'] = "127.0.0.1";
$ldapconfig['port'] = NULL;
$ldapconfig['basedn'] = "dc=example,dc=com";
$ldapconfig['binddn'] = "user";
$ldapconfig['bindpw'] = "password";


function ldap_authenticate($user, $pass) {
global $ldapconfig;
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
if ($user != "" && $pass != "") {
    $ds=ldap_connect($ldapconfig['host'],$ldapconfig['port']);
    if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
        return NULL;
    }
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);
    $r = ldap_search( $ds, $ldapconfig['basedn'], 'sAMAccountName=' . $user);
    if ($r) {
        $result = ldap_get_entries( $ds, $r);
        if ($result[0]) {
            if (ldap_bind( $ds, $result[0]['dn'], $pass) ) {
                return $result[0]['mail'][0];
            }
        }
    }
}
return NULL;

当我尝试运行代码时,出现以下错误:
xxxx行上的ldap_bind无效DN语法
该行如下:
ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);

最佳答案

如错误所述,您的绑定(bind)DN格式错误。 DN代表对象的完整路径-因此,在您的情况下,应该是这样的(看起来像您在AD上?)

“cn =用户名,ou =域用户,dc =示例,dc = com”

根据您的LDAP风格(Active Directory,OpenLDAP等),您也许可以使用uid(因此只是“用户名”)进行绑定(bind),但是最好假设您始终需要完整的DN。

您可以使用Apache Directory Studio之类的LDAP工具来帮助建立查询并找出对象的DN。或也有ldp.exe(假设它是AD),但Directory Studio更易于使用。

关于php - LDAP问题,ldap_bind dn语法无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13487225/

10-13 01:33