使用LDAP和PHP方式查询Active Directory信息


Query Active Directory Info using LDAP and PHP

我有一个关于使用PHP实现LDAP的问题。我最近才开始阅读LDAP,但我仍然无法理解它是如何工作的。我正在开发一个新的应用程序,只有在Active directory中找到用户时才授予访问权限。我下面发布的代码确定用户输入的用户名和密码是否在Active Directory中。这段代码可以工作,但是现在我想根据输入的凭据提取用户的名字。我想拉这个信息的原因是,当用户登录时,他们被重定向到另一个页面(即。dashboard.php)将显示内容和短语"欢迎"用户的名字。我只是不确定我该如何提取这些信息。如果有人能提供我应该如何去做这件事的反馈,我将不胜感激。

连接LDAP服务器:

<?php
$ldaphost = "name of host"; //LDAP Host
$ldapport = 389; //LDAP Port Number                
$ldapconn = ldap_connect($ldaphost, $ldapport); //Connect to LDAP Host on LDAP Port Number
// Check LDAP connection
if(!$ldapconn) {
    die("Unsuccessful connection to " . $ldaphost . " on port " . $ldapport . "<br />");    
} 
?>

验证用户是否在Active Directory中:

<?php
include 'ldap_connect.php';
$username = $_POST['username'];
$password = $_POST['password'];
$ldapbind = ldap_bind($ldapconn, $username, $password);
if ($ldapbind) {
    header("Location: ../dashboard.php");
} else {
    print "Access Denied!";
}
?>

您必须为用户做一个ldap_search以获得用户的属性。

像这样:

$ldapresults = ldap_search($ldapconn, $baseDn, 'samAccountName=' . $username, array('sn'), 0, 0, 10);
if (! $ldapresults) {
    die('No results found');
}
$results = ldap_get_entries($ldapconn, $ldapresults);
var_dump($results);

你应该看到$result的内容。

也许您将不得不使用$baseDn,过滤器(samAccountName=$username)和检索的属性(array('sn'))来获得您正在寻找的值。

我已经创建了一个gist,它可以一次性完成ldap身份验证和用户信息检索。看看https://gist.github.com/heiglandreas/5689592