0

まず、匿名の LDAP_bind を有効にします。私が抱えている問題は次のとおりです。

このコードは問題なく動作します:

<?php
$ldaprdn  = 'uname';   
$ldappass = 'password';  

$ldapconn = ldap_connect("ldap.example.com")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {
    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }
}
?>

以下のこれは、何があっても「成功」を返します

   <?php
    $ldaprdn  = '';   
    $ldappass = '';  

    $ldapconn = ldap_connect("ldap.example.com")
        or die("Could not connect to LDAP server.");

    if ($ldapconn) {
        // binding to ldap server
        $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

        if ($ldapbind) {
            echo "LDAP bind successful...";
        } else {
            echo "LDAP bind failed...";
        }
    }
    ?>

このバージョンでは資格情報が空白のままになっていることに注意してください。資格情報が空白のままになっていると、これが入り込んでしまうという事実が好きではありません。私は何か間違ったことをしていますか? または、単純にこの ldap_bind() が複雑です。3 つのパラメーターを指定して関数を呼び出すと、デフォルトで匿名にすべきではないと思います。

ユーザー名とパスワードが空白のままになっている場合に備えて、ユーザー名とパスワードをダミーの値に設定することで回避できますが、これはまったく良い方法ではありません。助けてください...

ソース:http://php.net/manual/en/function.ldap-bind.php

4

1 に答える 1

1

Web アプリの LDAP 認証を行っていますか? もしそうなら、これはあなたがする必要があることです:

  1. 特権バインドを使用して、検索フィルターで提供されたユーザー名を使用して、ユーザーの DN (Active Directory を使用している場合は UPN) を取得します。
  2. それが失敗した場合は、ユーザー名が正しくないため、ユーザー名/パスワードが正しくないことをユーザーに知らせてください。
  3. 成功した場合は、DN を取得し、その DN と提供されたパスワードを使用して再度バインドします。
  4. これで、正常に成功または失敗するはずです。

つまり、渡されたユーザー名を取得して、それを使用してバインドしようとしないでください。

* 何をしようとしているのか、どの LDAP サーバーを使用しているのかについて詳しく教えていただければ、より詳細な回答を提供できます。

于 2012-04-12T00:29:38.363 に答える