【问题标题】:querying AD using ldap / php使用 ldap / php 查询 AD
【发布时间】:2015-12-08 21:35:32
【问题描述】:

背景信息

我试图弄清楚如何通过 php Web 应用程序查询我们的活动目录服务器以获取有关用户/组的信息。 (让我们称之为“小部件应用程序”。最终,我将使用这些信息来尝试“查看”除了用户名和密码之外,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 实施的人,所以我还很熟悉。 如果您对我有任何建议,请随时提出。

谢谢

【问题讨论】:

    标签: php apache active-directory ldap ldap-query


    【解决方案1】:

    问题是我使用了一个通用名称进行过滤。请注意:

     AuthLDAPBindDN "CN=testvalue1,OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
    

    所以要修复它,我只需要从过滤器中删除它就可以了。

     AuthLDAPBindDN "OU=Services,OU=Accounts,DC=td,DC=ab,DC=org"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-08
      • 2012-12-10
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多