1. ホーム
  2. php

[解決済み] LDAPの問題、ldap_bindのdn構文が無効である

2022-02-10 02:33:36

質問

私の間違いは本当に簡単なことだと分かっているのですが、問題を見つけようとしましたが、見当たりません。

LDAPに接続し、必要な情報を見つけることができるように、phpで関数を作成しようとしています。

私の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 invalid DN syntax on line xxxx(ldap_bindは無効なDN構文です。 で、その行は次のようなものです。

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

解決方法は?

エラーにあるように、バインドDNのフォーマットが間違っています。DNはオブジェクトへのフルパスを表しますので、あなたの場合は次のようになります。

cn=username,ou=domain users,dc=example,dc=com"

LDAPの種類(Active Directory、OpenLDAPなど)により、以下のようになります。 可能性があります。 しかし、常に完全なDNが必要であると考えたほうがよいでしょう。

のような LDAP ツールを使用することができます。 Apache Directory Studio を使用すると、クエリーを作成したり、オブジェクトのDNを見つけるのに役立ちます。また、以下のようなものもあります。 ldp.exe もありますが(ADであれば)、directory studioの方が使いやすいと思います。