【问题标题】:Query Active Directory Info using LDAP and PHP使用 LDAP 和 PHP 查询 Active Directory 信息
【发布时间】:2014-07-06 15:54:31
【问题描述】:

我有一个关于使用 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!";
}
?>

【问题讨论】:

    标签: php active-directory ldap


    【解决方案1】:

    您必须为用户执行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

    【讨论】:

    • 非常感谢您提供这些信息。我将不得不试一试,我非常感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多