如何用PHP LDAP扩展获取AD非默认属性lockedOut?
能否通过PHP LDAP扩展获取AD中默认不返回的属性?
首先澄清:你提到的LockedOut并非AD的“特性”,它是PowerShell AD模块对LDAP原生属性lockoutTime的友好别名,本质属于AD的LDAP属性,完全可以通过PHP LDAP扩展获取,问题出在你用错了属性名。
问题根源
PowerShell里的LockedOut是简化后的名称,对应的AD LDAP原生属性是lockoutTime——这才是你需要在PHP中指定的属性名。AD默认不会返回这个属性,所以必须在搜索时显式声明。
修正后的PHP代码示例
// 确保连接时设置LDAP协议版本3(AD推荐配置) ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3); // 搜索时指定正确的属性名lockoutTime $result = ldap_search($conn, $dn, "cn=foo", ["lockoutTime"]); if ($result === false) { // 错误处理逻辑 } $count = ldap_count_entries($conn, $result); if ($count !== 1) { // 错误处理逻辑 } $entry = ldap_first_entry($conn, $result); // 现在能正常获取到lockoutTime属性 $attr = ldap_get_attributes($conn, $entry); // 解析锁定状态:lockoutTime值为0表示未锁定,非0表示已锁定 $isLockedOut = isset($attr['lockoutTime'][0]) && $attr['lockoutTime'][0] != 0; // 也可以用ldap_get_values直接获取属性值 $lockoutValues = ldap_get_values($conn, $entry, "lockoutTime"); if ($lockoutValues !== false) { $isLockedOut = $lockoutValues[0] != 0; }
额外注意事项
- 确保你的LDAP绑定账号拥有读取AD用户
lockoutTime属性的权限,否则会返回空值或错误。 - 若仍有问题,可临时在搜索时指定
*获取所有属性(仅用于调试,生产环境不推荐),验证lockoutTime是否存在。
内容的提问来源于stack exchange,提问作者kagmole
相关产品推荐
相关产品推荐

