You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于PHP实现带自定义登录表单的ADFS SSO及AD用户验证

实现方案:PHP集成Active Directory用户验证并返回用户信息

核心流程

  • 自有应用登录页收集用户邮箱与密码
  • PHP后端对接Active Directory完成身份校验
  • 校验通过后提取用户邮箱等信息返回至前端
  • 适配AWS服务器环境确保依赖正常

具体代码实现

1. 登录前端表单示例

<form method="post" action="ad-auth.php">
    <label>邮箱:</label>
    <input type="email" name="email" required>
    <label>密码:</label>
    <input type="password" name="password" required>
    <button type="submit">登录</button>
</form>

2. PHP后端AD验证逻辑

依赖PHP的ldap扩展(需在AWS服务器上启用),以下为核心验证与信息查询代码:

<?php
// 生产环境建议关闭错误输出,改用日志记录
error_reporting(0);

// AD配置(根据实际环境修改)
$adServer = 'ldap://你的AD服务器IP或域名';
$adDomain = '你的域名称.com';
$adBaseDn = 'DC=你的域名称,DC=com';

// 获取表单提交数据
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';

// 从邮箱提取AD用户名(假设邮箱格式为user@domain.com)
$username = explode('@', $email)[0];
$fullAdUsername = $username . '@' . $adDomain;

// 初始化LDAP连接
$ldapConn = ldap_connect($adServer);
if (!$ldapConn) {
    echo json_encode(['status' => 'error', 'message' => '无法连接AD服务器']);
    exit;
}

// 设置LDAP协议选项
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);

// 尝试绑定AD用户进行验证
$bindSuccess = ldap_bind($ldapConn, $fullAdUsername, $password);
if (!$bindSuccess) {
    echo json_encode(['status' => 'error', 'message' => '邮箱或密码错误']);
    ldap_close($ldapConn);
    exit;
}

// 验证通过后查询用户详细信息
$searchFilter = "(mail=$email)";
$targetAttributes = ['mail', 'displayName', 'samaccountname']; // 按需指定返回字段
$searchResult = ldap_search($ldapConn, $adBaseDn, $searchFilter, $targetAttributes);
$userEntries = ldap_get_entries($ldapConn, $searchResult);

if ($userEntries['count'] === 0) {
    echo json_encode(['status' => 'error', 'message' => '未找到用户信息']);
} else {
    $userInfo = [
        'status' => 'success',
        'email' => $userEntries[0]['mail'][0],
        'display_name' => $userEntries[0]['displayname'][0] ?? '',
        'username' => $userEntries[0]['samaccountname'][0] ?? ''
    ];
    echo json_encode($userInfo);
}

// 关闭LDAP连接
ldap_close($ldapConn);
?>

AWS服务器环境配置要点

  • 启用PHP的ldap扩展:
    • Ubuntu/Debian系统:执行sudo apt-get install php-ldap后重启Apache/Nginx
    • CentOS/RHEL系统:执行sudo yum install php-ldap后重启服务
  • 安全组配置:开放AWS服务器到AD服务器的LDAP端口(默认389,加密端口636)
  • 共享XML配置(若两台服务器需统一配置):将AD参数写入XML文件,PHP读取使用:
    // 读取XML配置示例
    $configXml = simplexml_load_file('/服务器路径/ad-config.xml');
    $adServer = (string)$configXml->server;
    $adDomain = (string)$configXml->domain;
    $adBaseDn = (string)$configXml->baseDn;
    

生产环境注意事项

  • 强制使用HTTPS传输,避免密码明文泄露
  • 禁止硬编码AD配置,改用环境变量或加密配置文件存储
  • 完善错误日志记录,便于排查问题
  • 若AD启用SSL,使用ldaps://协议与636端口,并配置对应证书

内容的提问来源于stack exchange,提问作者Farhan Haider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:15:51