web-dev-qa-db-ja.com

LDAPの問題、ldap_bindの無効なdn構文

私の間違いが本当に簡単なものになることは知っていますが、問題を見つけようとしましたが、それが見えません。おそらく、あなたが私を助けることができます。

私は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;

コードを実行しようとすると、次の間違いが発生します。ldap_bind行xxxxのDN構文が無効で、その行は次のとおりです。

ldap_bind( $ds, $ldapconfig['binddn'], $ldapconfig['bindpw']);
8
Humberto

エラーで述べたように、バインドDNの形式が間違っています。 DNはオブジェクトへの完全なパスを表します-したがって、あなたのケースではこのようなものでなければなりません(ADにいるように見えますか?)

「cn = username、ou = domain users、dc = example、dc = com」

LDAPの種類(Active Directory、OpenLDAPなど)に応じて、mightはuid(つまり「username」)を使用してバインドできます。ただし、常に完全なDNが必要であると想定するのが最善です。

Apache Directory Studio のようなLDAPツールを使用して、クエリを作成し、オブジェクトのDNが何かを見つけることができます。または ldp.exe もあります(ただしADの場合)、directory studioの方が使いやすいです。

9
dearlbry

DCでの実行:dsquery user -samid jim

sAMAccountNameに一致するユーザーのDNが表示されます: "CN = Jim Willeke、CN = Users、DC = mad、DC = willeke、DC = com"

http://ldapwiki.willeke.com/wiki/LDAP%20and%20Active%20Directory

1
jwilleke