当前位置:  开发笔记 > 编程语言 > 正文

使用PHP从LDAP验证用户

如何解决《使用PHP从LDAP验证用户》经验,为你挑选了1个好方法。



1> Stefan Gehri..:

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

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

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

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

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

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

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

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

它起初并不像听起来那么难.一般来说,我会建议使用某种标准库中针对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);

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有