PHP 从活动目录中读取用户信息
PHP read user information from active directory
我必须阅读一些用户的一般信息
如姓名、姓氏、电子邮件、部门等来自带有 PHP 脚本的活动目录
这是我的代码:
define('DOMAIN_FQDN', 'domain.ltd');
define('LDAP_SERVER', '192.168.30.1');
$user = strip_tags($_POST['username']) .'@'. DOMAIN_FQDN;
$pass = stripslashes($_POST['password']);
$conn = ldap_connect("ldap://". LDAP_SERVER ."/");
if (!$conn){
$err = 'Could not connect to LDAP server';
}else{
//define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($conn, $user, $pass);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);
if ($bind){
//$base_dn = array("CN=Users,DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=Users,OU=People,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
$base_dn = array("DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=*,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
$result = ldap_search(array($conn,$conn), $base_dn, "(cn=*)");
if (!count($result)){
$err = 'Unable to login: '. ldap_error($conn);
}else{
foreach ($result as $res){
$info = ldap_get_entries($conn, $res);
print_r($info);
}
}
}
}
此代码 print_r($info);
returns 一个包含大量数据的数组,这意味着我的连接工作正常..
但是没有关于用户的任何信息
我需要获取当前登录的用户数据
这是错误的还是我必须在上面添加更多选项?
活动目录中的用户数据:
您必须决定要阅读哪些帐户。使用过滤器 (cn=*)
,您告诉 AD 为您提供 cn
属性具有值的每个对象。这将匹配几乎您域中的每个 AD 对象,包括我认为您不需要的计算机。
如果要查找域中的所有用户,可以使用:
(objectClass=user)
如果您想查找某个特定用户,则查询将取决于您拥有的该用户的标识符。例如,如果您知道他们的用户名(假设为 "PeimanF"),则查询将如下所示:
(&(objectClass=user)(sAMAccountName=PeimanF))
我必须阅读一些用户的一般信息
如姓名、姓氏、电子邮件、部门等来自带有 PHP 脚本的活动目录
这是我的代码:
define('DOMAIN_FQDN', 'domain.ltd');
define('LDAP_SERVER', '192.168.30.1');
$user = strip_tags($_POST['username']) .'@'. DOMAIN_FQDN;
$pass = stripslashes($_POST['password']);
$conn = ldap_connect("ldap://". LDAP_SERVER ."/");
if (!$conn){
$err = 'Could not connect to LDAP server';
}else{
//define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($conn, $user, $pass);
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);
if ($bind){
//$base_dn = array("CN=Users,DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=Users,OU=People,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
$base_dn = array("DC=". join(',DC=', explode('.', DOMAIN_FQDN)), "OU=*,DC=". join(',DC=', explode('.', DOMAIN_FQDN)));
$result = ldap_search(array($conn,$conn), $base_dn, "(cn=*)");
if (!count($result)){
$err = 'Unable to login: '. ldap_error($conn);
}else{
foreach ($result as $res){
$info = ldap_get_entries($conn, $res);
print_r($info);
}
}
}
}
此代码 print_r($info);
returns 一个包含大量数据的数组,这意味着我的连接工作正常..
但是没有关于用户的任何信息
我需要获取当前登录的用户数据
这是错误的还是我必须在上面添加更多选项?
活动目录中的用户数据:
您必须决定要阅读哪些帐户。使用过滤器 (cn=*)
,您告诉 AD 为您提供 cn
属性具有值的每个对象。这将匹配几乎您域中的每个 AD 对象,包括我认为您不需要的计算机。
如果要查找域中的所有用户,可以使用:
(objectClass=user)
如果您想查找某个特定用户,则查询将取决于您拥有的该用户的标识符。例如,如果您知道他们的用户名(假设为 "PeimanF"),则查询将如下所示:
(&(objectClass=user)(sAMAccountName=PeimanF))