使用PHP从LDAP验证用户

35 php authentication ldap

我的项目是为我们的大学制作模块注册系统.所以我联系了我大学的IT人员,详细了解了学生进入系统的情况.我们正在使用现有的大学登录系统开发系统.他们给了我一些LDAP信息,我不知道它的用法.我在Apacha服务器上使用PHP,Mysql.如果用户ID和密码包含LDAP信息,我如何验证登录系统的用户.

以下是LDAP信息(我更改了域名等)

blueroom.ac.uk域的LDAP信息


LDAP Host : ad.blueroom.ac.uk

LDAP port no: 389

BASE DN : ou=bluebird, dc=bluebird, dc=ac, dc=my

LDAP account to bind : cn = kikdap, ou=servacc, dc=bluebird,dc=ac,dc=uk

LDAP account password : ********

Attribute : sAMAccountName 
Run Code Online (Sandbox Code Playgroud)

Ste*_*rig 52

一般程序是(括号中的相关ext/ldap php命令):

  1. 连接到使用"LDAP主机"和"LDAP端口号" LDAP服务器(ldap_connect() ),并设置正确的连接选项(ldap_set_option() ),尤其是LDAP_OPT_PROTOCOL_VERSIONLDAP_OPT_REFERRALS

  2. 使用"LDAP帐户绑定"和"LDAP帐户密码"(ldap_bind())绑定到LDAP服务器- 如果您要对Active Directory服务器进行身份验证,则可以直接使用登录页面中的用户名和密码并跳过所有以下步骤.

  3. 通过指定"BASE DN"和相应的LDAP过滤器在树中搜索匹配的用户条目/对象 - 很可能(&(objectClass=user)(sAMAccountName=%s))在哪里%s应该用要验证的用户名替换(ldap_search())

  4. 检查返回的条目数是否为1(如果<> 1则出现问题,例如找不到用户或找到多个用户)

  5. 检索此单个条目的可分辨名称(DN)(ldap_get_dn())

  6. 使用上一步中找到的DN尝试使用身份验证页面上给出的密码绑定到LDAP服务器(ldap_bind())

  7. 如果绑定成功则一切正常,如果没有,则很可能是密码错误

它起初并不像听起来那么难.一般来说,我会建议使用某种标准库中针对LDAP服务器进行身份验证,如Net_LDAP2PEAR包或Zend_Ldap出的Zend框架.我没有实际使用的经验Net_LDAP2(虽然我非常了解代码)但是Zend_Ldap对于Active Directory服务器或ADAMS服务器(这显然是你正在使用的)非常好.

这将使用以下方法Zend_Ldap:

$options = array(
    'host'                 => 'ad.blueroom.ac.uk',
    'useStartTls'          => true,
    'accountDomainName'    => 'blueroom.ac.uk',
    'accountCanonicalForm' => 4,
    'baseDn'               => 'ou=bluebird,dc=bluebird,dc=ac,dc=my',
);
$ldap = new Zend_Ldap($options);
try {
    $ldap->bind('user', 'password');
} catch (Zend_Ldap_Exception $e) {
    // something failed - inspect $e
}
// bind successful
$acctname = $ldap->getCanonicalAccountName('user', Zend_Ldap::ACCTNAME_FORM_DN);
Run Code Online (Sandbox Code Playgroud)


Emi*_*Sit 4

您可以尝试http://code.activestate.com/recipes/101525/,同时参考https://www.php.net/ldap以及 Google 搜索[php ldapauthentication]的其他结果。