ldap_bind(...)php在ldp.exe工作时提供无效凭据

时间:2014-08-19 12:16:12

标签: php active-directory ldap

我在查找用于连接到php中的广告的凭据时遇到了严重问题。 我可以使用具有通用功能类型的ldp.exe和正确的域,用户和密码成功连接。使用ldp.exe中设置的任何其他选项,我只能连接匿名。

在php中我没有机会。我对ldap不太熟悉,所以我有点迷失在这里。 这里有一些php代码:

$ldap_host = "ldap://<dc>:389";
$ldap_user = "<username>";
$ldap_pw = "<pw>";
$ldap_domain = "<full domain>";

$connection = ldap_connect($ldap_host) or die("Could not connect to LDAP server."); 

//$user = $ldap_user;
$user = $ldap_user."@".$ldap_domain;
//$user = $ldap_user;
//$user = "uid=".$ldap_user;
//$user = $ldap_domain."\\".$ldap_user;
//$user = "User=$ldap_user";
//$user = "cn=".$ldap_user;
//$user = "CN=".$ldap_user.",OU=<someOU>,OU=<someOU>,DC=<DC1>,DC=<DC2>";

ldap_bind($connection, $user, $ldap_pw); 

你可以看到我试过的一些组合。在ldp.exe中,它只是用户名字段中的$ ldap_user和域字段中的$ ldap_domain。 Imho至少用户@域和域\用户版本应该工作。它是一个kerberos域,如果这很重要。

嗯,我不认为有代码错误。但是如何将ldp.exe的泛型函数类型转换为php?

此处出现错误消息,以便于查找:

Warning: ldap_bind(): Unable to bind to server: Invalid credentials in ...

我真的很感激一些帮助。

编辑:在ldp.exe中,我似乎使用了SSPI方法。到目前为止,我认为泛型选择了自己的方法。它与ldap_sasl_bind()有关吗?服务器在连接时指定他能够执行以下操作:

supportedSASLMechanisms: GSSAPI; GSS-SPNEGO; EXTERNAL; DIGEST-MD5; 

虽然只有GSSAPI(SSPI ????)似乎有效。

EDIT2:成功验证后的ldp.exe的其他输出:

res = ldap_bind_s(ld, NULL, &NtAuthIdentity, 1158); // v.3
    {NtAuthIdentity: User='<username>'; Pwd= <unavailable>; domain = '<full domain'.}
Authenticated as dn:'<username>'.

1 个答案:

答案 0 :(得分:0)

尝试将端口指定为变量

$ldapPort = 389;

我会忽略主机部分,只是尝试连接到您的服务器(您将其作为域)检查您的ldap绑定是否正常工作

// Handle login requests
$ds = ldap_connect($ldapServer, $ldapPort);
if (ldap_bind($ds, $user, $password)) {
  // Successful auth
  $_SESSION['lastactivity'] = time();
  $_SESSION['username'] = $user;
  $_SESSION['password'] = $password;
  return $ds;
} else {
  // Auth failed
  header("Location: failpage.php?fail=1"); //bad credentials
  exit;
}

同样要调用所有属性,请尝试http://blog.uta.edu/jthardy/2007/08/08/obtaining-user-information-from-ldap-using-php/