我在查找用于连接到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>'.
答案 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/