背景资料
我试图弄清楚如何通过php Web应用程序查询我们的活动目录服务器以获取有关用户/组的信息。 (让我们把它称为"小部件应用程序"。最后,我将使用此信息尝试"请参阅" AD中可用的字段/数据除了用户名和密码之外,还要检查/使用作为身份验证的一部分。例如,我只想允许特定AD组中的人...等等。
我以此为例:http://php.net/manual/en/ldap.examples-basic.php
问题
不幸的是,即使我使用我的AD用户名作为过滤器,我也没有得到任何结果。
这就是我的结果:
Connecting ...connect result is Resource id #26
Binding ...Bind result is 1
Searching for (sn=myusername*) ...Search result is Resource id #27
Getting entries ...
Data for 0 items returned:
到目前为止我尝试过的事情:
我们有另一个Web应用程序与小部件应用程序在同一个Web服务器上运行。设置此其他应用程序,以便apache将提示输入AD凭据。我知道它有效,因为当我尝试在这个辅助应用程序上验证自己时,我的AD凭据已经过身份验证,并且我获得了使用该应用程序所需的授权。
所以我开始围绕apache conf,并试图确保我的PHP代码使用相同的值。
守则
这是当前失败的PHP代码:
public function ldap_test() {
echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("10.11.11.1111"); // must be a valid LDAP server!
echo "connect result is " . $ds . "<br />";
if ($ds) {
echo "Binding ...";
//$r=ldap_bind($ds);
$r=ldap_bind($ds,"CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org", "somepasswordvalue");
// read-only access
echo "Bind result is " . $r . "<br />";
echo "Searching for (sn=myusername*) ...";
// Search surname entry
$sr=ldap_search($ds, "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org", "somepasswordvalue", "(sAMAccountName=myusername*)");
echo "Search result is " . $sr . "<br />";
echo "Number of entries returned is " . ldap_count_entries($ds, $sr) . "<br />";
echo "Getting entries ...<p>";
$info = ldap_get_entries($ds, $sr);
echo "Data for " . $info["count"] . " items returned:<p>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: " . $info[$i]["dn"] . "<br />";
echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
}
我用来构建我的PHP代码的Apache配置:(此配置可以正常提示我输入我的AD凭据并正确验证)
<AuthnProviderAlias ldap ldap-test>
AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
AuthLDAPBindPassword somepasswordvalue
AuthLDAPURL "ldap://10.11.11.111/ou=Accounts,dc=td,dc=ab,dc=org?sAMAccountName?sub?(objectClass=*)"
AuthLDAPMaxSubGroupDepth 5
</AuthnProviderAlias>
这是我第一次尝试在PHP中进行AD身份验证,而我并不是管理我们的AD实现的人,因此我非常环保。 如果您对我有任何建议,请随意。
由于
答案 0 :(得分:0)
问题在于我是用一个通用名称过滤的。请注意:
AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
所以要解决它,我只需要从过滤器中删除它并且它有效。
AuthLDAPBindDN "OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"