0

サーバーに対して認証済みバインドを実行する際に問題が発生しています。問題はコードにあるようには見えませんが、サーバーの問題である可能性があります。

ちょうどあなたが知っているので;

  • Apache/PHP で LDAP が有効になっている
  • user@domain.com として接続しています
  • ドメイン コントローラーで LDAP が実行されており、ファイアウォールにエントリがある (Windows Server 2008 R2)
  • 匿名バインドを実行できます

このスクリプトを使用して匿名でバインドできます。

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

if ($ldapconn) {

    // binding anonymously
    $ldapbind = ldap_bind($ldapconn);

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

}

ただし、このスクリプトを使用して認証済みバインドを実行しようとすると失敗します。

// Authenticated Bind
$ldaprdn  = 'username@domain.com';     // ldap rdn or dn
$ldappass = 'password';  // associated password

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

if ($ldapconn) {

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

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }

}

どこが間違っていますか?

4

2 に答える 2

0

さて、多くの調査の後、使用してエラー情報を有効にしたldap_errno()ところldap_error()、「強力な認証が必要です」というエラーが返されることがわかり、2 つの解決策が見つかりました。

グループ ポリシー設定の調整

  • 署名のネゴシエート (ネットワーク セキュリティ: LDAP クライアントの署名要件)
  • 署名要件なし (ドメイン コントローラー: LDAP サーバーの署名要件)

  • 結果: 正常にバインドできましたが、ユーザー名またはパスワードを間違って入力すると、期待どおりに「無効な資格情報」がスローされます。

LDAP over SSL (LDAPS) を有効にする

于 2013-04-09T12:01:53.703 に答える
0

LDAP でDNas ログインが必要になる場合があります。DN を取得するには、uid最初にユーザーを検索します。

$search = ldap_search($ldapconn, $baseDn, $filter, $attributes);

if ($search) {
    $entries = ldap_get_entries($ldapconn, 'uid=' . $ldaprdn);// Here $ldaprdn is the email
    if (is_array($entries)) {
        $ldaprdn = $entries[0]['dn']; // Get the DN of the user
    }
}

$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

// ....

$ldaprdn: LDAP インジェクション攻撃を回避するには、エスケープする必要があります。

于 2013-04-09T09:58:19.703 に答える