我的项目是为我们的大学制作模块注册系统.所以我联系了我大学的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命令):
连接到使用"LDAP主机"和"LDAP端口号" LDAP服务器(ldap_connect() ),并设置正确的连接选项(ldap_set_option() ),尤其是LDAP_OPT_PROTOCOL_VERSION
和LDAP_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_LDAP2
PEAR包或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)
您可以尝试http://code.activestate.com/recipes/101525/,同时参考https://www.php.net/ldap以及 Google 搜索[php ldapauthentication]的其他结果。
归档时间: |
|
查看次数: |
55411 次 |
最近记录: |