4

PHP を使用して LDAP 認証を使用しようとしています。
以下は私のコードです:

<?php

$ldaphost = 'ldap://ldapServer';
$ldapport = 389;

$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
//ldap_set_option($ds, LDAP_OPT_DEBUG_LEVEL, 7);
if ($ds) 
{
    $username = "testuser@domain.com";
    $upasswd = "testpass";

    $ldapbind = ldap_bind($ds, $username, $upasswd);


    if ($ldapbind) 
        {print "Congratulations! $username is authenticated.";}
    else 
        {print "Access Denied!";}


}
?>

しかし、それは以下のエラーを発生させます:

PHP 警告:: ldap_bind()サーバーにバインドできません: LDAP サーバーに接続できません

どうすれば解決できますか?

注:ldap.configフォーラムでこの用語に出くわしたので、どこかにファイルが必要ですか? 私のマシンにはそのようなファイルはありません。私はphp_ldap.dllextフォルダーにあり、使用していWindowsます。

4

5 に答える 5

2

バインドするときは、ユーザー名ではなくDNにバインドします。

$username 変数は次のようになります。

$username = 'uid=testuser,ou=People,dc=domain,dc=com';
于 2012-09-04T09:06:14.333 に答える
1

ldap_connect ()はプロトコルを必要としないので、この素朴なパッチで問題を解決できるはずです。

--- ldap.php.bak    2012-09-04 10:52:29.563203493 +0200
+++ ldap.php    2012-09-04 10:52:46.807203766 +0200
@@ -1,6 +1,6 @@
 <?php

-$ldaphost = 'ldap://ldapServer';
+$ldaphost = 'ldapServer';
 $ldapport = 389;

 $ds = ldap_connect($ldaphost, $ldapport)

公式ドキュメントで基本的な例を確認してください。

于 2012-09-04T08:54:22.780 に答える
0

Minras が言っていたように、あなたは間違った資格情報でバインドしています。次のようなことを試してください:

$ldaprdn  = 'cn=binder,dc=domain,dc=com';     // ldap rdn or dn or proxy agent or admin
$ldappass = 'password';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("54.85.xx.xx")
        or die("Could not connect to LDAP server.");

// Set some ldap options for talking to 
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);

if ($ldapconn) {

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

        // verify binding
        if ($ldapbind) {
            echo "Done..\n</h1>";
        } else {
            echo "Damn you LDAP...\n";
        }

}
于 2014-02-21T14:18:42.460 に答える
0

まだ答えが必要かどうかはわかりませんが、私の経験から何かを追加したいと思います。

$username   = 'bentcoder';
$password   = '123123';
$server = '192.168.32.4';
$domain = '@yourdomain.com';
$port       = 389;

$ldap_connection = ldap_connect($server, $port);

if (! $ldap_connection)
{
    echo '<p>LDAP SERVER CONNECTION FAILED</p>';
    exit;
}

// Help talking to AD
ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);

$ldap_bind = @ldap_bind($ldap_connection, $username.$domain, $password);

if (! $ldap_bind)
{
    echo '<p>LDAP BINDING FAILED</p>';
    exit;
}

// You can work now!!!

ldap_close($ldap_connection);

ノート:

  • php_ldapphp.ini で拡張機能を有効にする必要があります。【拡張子=php_ldap.dll】
  • [192.168.32.4] の上の IP アドレスは [yourdomain.com] に置き換えることができます
  • Wamp を使用している場合、バージョン 1.9 ではすべて正常に動作したが、上記のバージョンでは動作しなかったことを覚えている限り、奇妙な問題に遭遇する可能性があります。

参考文献:

于 2015-06-20T21:20:08.403 に答える
0

ローカル ネットワークでそれを証明したところ、うまく機能しました。たとえば、Zentyal で Ldap を使用しているhttps://serveriporname/Users/Composite/Settings場合は、「ユーザー DN」で提供されるオプションを使用して、呼び出すアドレスを取得すると$userdns、次のコードを証明できます。

<?php
       //The variables are implicit

    $ad = ldap_connect($ldap_server) ;  //Ex: 10.0.0.1
    ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3) ; 

       //Using the provided user and password to login into LDAP server.
       //For the dc, normally will be the domain. 

        $sr=ldap_search($ad, $userdns, "cn=*usuario*");

        $info = ldap_get_entries($ad, $sr);

       for ($i=0; $i<$info["count"]; $i++) {
          /*Print out the user information here. If you rather to request by other field than cn take its name from here*/
          print_r($info[$i]);
          echo "<p><hr/></p>";
        }
       $ds = ldap_bind($ad,"uid=$ldap_user,$userdns",$ldap_pass);
       if($ds){
      echo "<h4>$ldap_user connect to LDAP server \"$ldap_domain\"</h4>";
       } else {
         echo "<h4>Unable to connect to LDAP server</h4>";
       }  
       ldap_close($ad);
?>
于 2014-01-24T19:49:26.233 に答える