我有严重的问题,找出使用哪些凭证来连接到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。至少user@domain和domain\user版本应该可以工作。这是一个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>'.发布于 2014-08-19 20:26:32
尝试将端口也指定到变量中
$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/
https://stackoverflow.com/questions/25383206
复制相似问题