PHP LDAP 获取用户属性,包括关联组

2023-11-26

对当前用户运行搜索以检索所有属性(包括使用 LDAP / PHP 的 Active Directory 中的关联组)的最佳方法是什么?

对于属性,主要只是名字、姓氏和显示名称。

对于关联组,仅包含用户所属的组,例如 memberOf 函数。

我尝试了一些选项,但似乎无法获得正确的过滤器/搜索组合,并且大多数示例涵盖检索存在已知组的用户列表。

我尝试在成功绑定后运行它:

$attributes = array("displayname");
$filter = "(&(sAMAccountName=$username))";
$result = ldap_search($ds, $ldapconfig['basedn'], $filter, $attributes);
$entries = ldap_get_entries($ds, $result);
if($entries["count"] > 0){
  echo "displayName: ".$entries[0]['displayname'][0]."<br/>";
 } else {
 echo("msg:'".ldap_error($ds)."'</br>");
 }

它返回以下错误:“没有这样的对象”。

UPDATE:

这是我尝试过的最新块,当我 print_r $info 变量时能够得到结果,但是 for 子句仍然在某处出错。我将 basedn 更改为仅 dc 属性:

$filter="($SearchField=$SearchFor)";
$sr=ldap_search($ds, $basedn, $filter, $LDAPFieldsToFind);
$info = ldap_get_entries($ds, $sr);

if($info["count"] > 0) {
    for ($x=0; $x<$info["count"]; $x++) {
        $sam=$info[$x]['samaccountname'][0];
        $giv=$info[$x]['givenname'][0];
        $tel=$info[$x]['telephonenumber'][0];
        $email=$info[$x]['mail'][0];
        $nam=$info[$x]['cn'][0];
        $dir=$info[$x]['homedirectory'][0];
        $dir=strtolower($dir);
        $pos=strpos($dir,"home");
        $pos=$pos+5;
            if (stristr($sam, $SearchFor) && (strlen($dir) > 8)) {
              print "\nActive Directory says that:\n";
              print "CN is: ".$nam." \n";
              print "SAMAccountName is: ".$sam." \n";
              print "Given Name is: ".$giv." \n";
              print "Telephone is: ".$tel." \n";
              print "Home Directory is: ".$dir." \n";
            }   
    }
    }

print_r的结果是:

( [count] => 1 [0] => Array ( [cn] => Array ( [count] => 1 [0] => George ) [0] => cn [givenname] => Array ( [count] => 1 [0] => George ) [1] => givenname [memberof] => Array ( [count] => 4 [0] => CN=EQCStaff,CN=Users,DC=EQC,DC=local [1] => CN=RDS Users,OU=Security Groups,OU=Service,DC=EQC,DC=local [2] => CN=SFTP Client Folders,OU=Security Groups,OU=Service,DC=EQC,DC=local [3] => CN=EQC Staff,OU=Security Groups,OU=Service,DC=EQC,DC=local ) [2] => memberof [samaccountname] => Array ( [count] => 1 [0] => gortiz ) [3] => samaccountname [mail] => Array ( [count] => 1 [0] => [email protected] ) [4] => mail [count] => 5 [dn] => CN=George,OU=Users,OU=Accounts,DC=EQC,DC=local ) )

这是我们用于转储 AD 信息的脚本,也许会对您有所帮助:

<?php
$ldap_columns = NULL;
$ldap_connection = NULL;
$ldap_password = 'top_secret_password';
$ldap_username = 'top_secret_username@'.LDAP_DOMAIN;

//------------------------------------------------------------------------------
// Connect to the LDAP server.
//------------------------------------------------------------------------------
$ldap_connection = ldap_connect(LDAP_HOSTNAME);
if (FALSE === $ldap_connection){
    die("<p>Failed to connect to the LDAP server: ". LDAP_HOSTNAME ."</p>");
}

ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); // We need this for doing an LDAP search.

if (TRUE !== ldap_bind($ldap_connection, $ldap_username, $ldap_password)){
    die('<p>Failed to bind to LDAP server.</p>');
}

//------------------------------------------------------------------------------
// Get a list of all Active Directory users.
//------------------------------------------------------------------------------
$ldap_base_dn = 'DC=xyz,DC=local';
$search_filter = "(&(objectCategory=person))";
$result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter);
if (FALSE !== $result){
    $entries = ldap_get_entries($ldap_connection, $result);
    if ($entries['count'] > 0){
        $odd = 0;
        foreach ($entries[0] AS $key => $value){
            if (0 === $odd%2){
                $ldap_columns[] = $key;
            }
            $odd++;
        }
        echo '<table class="data">';
        echo '<tr>';
        $header_count = 0;
        foreach ($ldap_columns AS $col_name){
            if (0 === $header_count++){
                echo '<th class="ul">';
            }else if (count($ldap_columns) === $header_count){
                echo '<th class="ur">';
            }else{
                echo '<th class="u">';
            }
            echo $col_name .'</th>';
        }
        echo '</tr>';
        for ($i = 0; $i < $entries['count']; $i++){
            echo '<tr>';
            $td_count = 0;
            foreach ($ldap_columns AS $col_name){
                if (0 === $td_count++){
                    echo '<td class="l">';
                }else{
                    echo '<td>';
                }
                if (isset($entries[$i][$col_name])){
                    $output = NULL;
                    if ('lastlogon' === $col_name || 'lastlogontimestamp' === $col_name){
                        $output = date('D M d, Y @ H:i:s', ($entries[$i][$col_name][0] / 10000000) - 11676009600); // See note below
                    }else{
                        $output = $entries[$i][$col_name][0];
                    }
                    echo $output .'</td>';
                }
            }
            echo '</tr>';
        }
        echo '</table>';
    }
}
ldap_unbind($ldap_connection); // Clean up after ourselves.
?>

User 发明家96建议使用 11644473600 而不是 11676009600。我可以确认 11644473600 在 Linux 环境中是正确的 - 我的猜测是inventor96 在 Windows 环境中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP LDAP 获取用户属性,包括关联组 的相关文章

  • symfony2 选择单选框的默认值

    我的项目是使用 Silex 和 Symfony 组件 即表单组件 编写的 我尝试创建一组从类中构建的单选按钮 并且我想预先选择其中一个单选按钮 我创建这样的表格 form app form factory gt createBuilder
  • 未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组

    我试图通过这两个查询在我的数据库中插入准备好的语句多个值 这两个查询都发生故障 返回 未捕获的错误 调用未定义的方法 mysqli stmt bindValue 对于第一个代码或 未捕获的 ValueError mysqli stmt ex
  • 计算两个数字之间的差异

    我想计算两个给定数字之间的差异 例如 1 5 或 24 35 我必须将数组中的数字分开并写出它们之间的差异 如下所示 1 2 3 4 5 或 24 25 26 27 28 29 30 31 32 33 34 35 是否有任何 php 函数可
  • 如何为 Lumen 的封闭路线指定路线名称?

    您好 我有以下流明路线 router gt get end function Illuminate Http Request request use router controller router gt app gt make App H
  • symfony 2 形式的函数 getName 做什么

    这是我的表格类 class CommentType extends AbstractType public function buildForm FormBuilder builder array options builder gt ad
  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • xdebug_start_trace 行为异常

    我正在尝试进一步减少脚本内存使用量 我试图让我的脚本使用 xdebug 生成输出来分析内存使用情况 这是一个基于 CLI 的脚本 有 shebang usr local bin php q 我向它传递一个参数并检查它 argc gt 1 i
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook
  • WooCommerce:用文本覆盖购物车价格

    我们有很多产品具有以下功能 No price 零价格 我们让它们可以通过内置挂钩购买 但购物车仍然将它们显示为具有0 price结账时 我们希望购物车和结帐摘要显示 特殊订单 或任何其他文本 但 WooCommerce 似乎使基于文本的价格
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • 我可以显示我在 PHP 中设置的所有 cookie 吗?

    我正在尝试诊断 cookie 中的错误 但 cookie 的名称不是应有的名称 PHP 有没有办法打印我的域设置的所有 cookie 你有没有尝试过 print r COOKIE
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 如何覆盖 phpunit 中导出的变量?

    我知道我可以设置环境变量 https phpunit de manual current en appendixes configuration html在我的 phpunit xml 里面
  • 解析 PHP 响应:未捕获的语法错误:意外的标记 <

    我正在使用 AJAX 来调用 PHP 脚本 我唯一需要从响应中解析的是脚本生成的随机 ID 问题是 PHP 脚本会引发许多错误 这些错误实际上很好 不会妨碍程序功能 唯一的问题是当我跑步时 parseJSON response I get
  • 避免 SQLite3 中的 SQL 注入

    我正在尝试找出一种避免 SQL 注入的好简单方法 到目前为止我只能提出两个想法 对用户输入进行 Base64 编码 其实不想这样做 使用正则表达式删除不需要的字符 目前正在使用这个 不确定是否100 安全 这是我当前的代码
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 使 div 的大小与其内部图像的大小相同

    我有一个带有以下代码的div HTML div img src img logo png div CSS div imgContainer width 250px height 250px padding 13px 问题是用户可以编辑图像大
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建

随机推荐

  • 从 dotnet Core 2.2.6 更改为 3.0.0 后出现 EF Linq 错误

    我正在尝试将解决方案升级到新的 Core Framework 3 0 0 现在我有一个小问题我不明白 看一下 这个方法在2 2 6中是没有问题的 public async Task
  • Gulp 错误:观看 ENOSPC

    您好 我在运行 gulp watch 时收到此错误 我在用着vueify在 Laravel 项目中 为什么会发生这种情况 这几天一直运行良好 今天就到了 gulp watch 12 56 01 Using gulpfile Document
  • 成功的特定领域语言?您使用哪一款? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我对领域特定语言的设计和实
  • 在 EAP 6.4.0 中使用 JPA 2.1

    我寻找这个问题的解决方案 到目前为止还没有成功 我们正在将应用程序迁移到 EAP 6 4 0 并且我们的应用程序依赖于 JPA 2 1 然而 JBoss 是一个 Java EE 6 服务器 因此以模块的形式包含 JPA 2 0 我尝试将 J
  • 如何使用 JavaScript 导航到不同的页面

    我目前正在使用以下代码将用户重定向到 C 中的另一个页面 Response Redirect somepage aspx 不过 我想用 JavaScript 来完成此操作 试试下面的代码
  • 如何从SQLite数据库中获取特定月份的数据

    我将数据保存在 SQLite 数据库中 我将日期保存在数据库中作为 DATETIME 数据类型 我只想从 SQLite 数据库中检索特定月份的数据 我尝试使用以下查询来检索数据 但它没有用 它为我提供了数据 但不是特定月份 SELECT c
  • 如何在集群中运行的节点中选举主节点?

    我正在编写一个托管云堆栈 在 EC2 等硬件级云提供商之上 我很快将面临的一个问题是 几个相同的节点如何决定其中哪一个成为主节点 即考虑在 EC2 上运行 5 台服务器 其中一台必须成为主服务器 其他服务器必须成为从服务器 我读到了一个描述
  • 删除 Django 登录表单中电子邮件的区分大小写

    我创建了一个自定义 UserModel 并使用电子邮件作为主要身份验证 ID 而不是用户名 问题是大小写敏感 因为它很重要 电子邮件受保护 电子邮件受保护 作为2个不同的帐户 我需要强制它作为 1 个帐户来处理 忽略它是大写还是小写 这是我
  • 如何在 CI 服务器上的 ASP.NET 网站上使用 NuGet 包

    我有许多 ASP NET Web 表单网站 没有 csproj 文件的网站 我正在尝试找出如何最好地使用它们的 NuGet 包 使用 Visual Studio 2015 时 通过 UI 添加 NuGet 包可以正常工作 站点根目录中有一个
  • 如何获得一个国家的城市边界

    我想从芬兰的 OSM 中提取城市特定数据 我有芬兰的数据 但我只需要 5 个城市的数据 赫尔辛基 埃斯波 万塔 考尼亚宁和 Siuntio 我可以提取赫尔辛基所需的数据 但我需要其余城市的城市边界 这样我可以制作一个多边形 如果我有多边形
  • python 中关键字参数值的命名空间是什么?

    我知道自从我发现 python 以不同的方式对待这个命名空间 def foo l l append 1 print l foo foo foo foo 打印以下内容 1 1 1 1 1 1 1 所以我对它们用作对象初始值设定项持怀疑态度 然
  • 如何获取 StackPanel 中元素的位置?

    假设我有一个 StackPanel 它会动态填充副本 从而更改其中元素的 Y 位置 我在该 StackPanel 中有一个特定元素 我想在 StackPanel 重新定位其所有子元素后找到该元素的 Y 位置 相对于 StackPanel 或
  • Python 2.7 如何解析格式为 2014-05-01 18:10:38-04:00 [重复]

    这个问题在这里已经有答案了 我正在尝试解析这个日期时间字符串 但尚未成功 我该如何获取它 d 2014 05 01 18 10 38 04 00 datetime datetime strptime d Y m d H M S Z Valu
  • 安装 Homebrew Python 后 Python 包位于错误的位置?

    将 Homebrew 的 Python 安装到已安装 Apple Python 的系统上后 列出的最后一个条目sys path使用 Homebrew 的 Python 是 Library Python 2 7 site packages u
  • 将 pandas DateTimeIndex 转换为 Unix 时间?

    将 pandas DateTimeIndex 转换为 Unix 时间 可迭代 的惯用方法是什么 这可能不是要走的路 time mktime t timetuple for t in my data frame index to pydate
  • Python 3.3+ 中的包不需要 __init__.py

    我正在使用Python 3 5 1 我在这里阅读了文档和包部分 https docs python org 3 tutorial modules html packages 现在 我有以下结构 home wujek Playground a
  • 如何从 API Platform 文档中隐藏路由

    我正在 Symfony 4 下使用 API Platform 构建 API 我想隐藏文档中的一个实体 该实体只能由打击的 ROLE ADMIN 访问 没有兴趣在文档中可见 这是我要隐藏的实体
  • IE 中的文本区域不会显示换行符

    使用 jQuery 的 load 方法我将文本加载到文本区域中 在 Chrome 和 FF 中运行良好 与往常一样 IE 必须有所不同 并且不会显示换行符 我试过了white space pre wrap没有运气 有任何想法吗 My cod
  • 是否可以将反射与 linq to 实体一起使用?

    我试图通过创建一个扩展方法来一般处理过滤来清理我的代码 这是我试图清理的代码 var queryResult from r in dc Retailers select r if string IsNullOrEmpty firstName
  • PHP LDAP 获取用户属性,包括关联组

    对当前用户运行搜索以检索所有属性 包括使用 LDAP PHP 的 Active Directory 中的关联组 的最佳方法是什么 对于属性 主要只是名字 姓氏和显示名称 对于关联组 仅包含用户所属的组 例如 memberOf 函数 我尝试了