|
May
25
|
如果使用活动目录(Active Directory)代替在数据库表中建立账号, 你可以使用原来Windows网络中的账号.
LDAP, 轻量级目录访问协议(Lightweight Directory Access Protocol), 是用来访问微软的活动目录等目录服务器(DS, Directory Server)的协议. PHP默认支持LDAP.
下面是使用LDAP进行用户身份验证的PHP程序. 在微软的活动目录中, 用户的唯一标识是”samaccountname”, 有些DS是”uid”. 方法是:
- 用有权限的账号的dn(形如 cn=user_name,ou=web,dc=ideawu,dc=com)连接LDAP Server.
- 根据登录用户的名字查询其dn.
- 用该dn连接LDAP Server. 如果连接上就是登录成功.
注意! 微软的活动目录服务器可以使用空账号连接成功(设置问题? 默认? 特例?)!
$userid = $_POST['userid'];
$user_password = $_POST['password'];
if($userid && $user_password){
// config
// $ldap_server = "ideawu.com";
// $ldap_admin = "user_name";
// $ldap_password = "xxx";
// $base_cn = "ou=web,dc=ideawu,dc=com";
$conn = ldap_connect($ldap_server);
if(!$conn){
die("<br>Connection LDAP server error");
}
$bind = ldap_bind($conn, $ldap_admin, $ldap_password);
if(!$bind){
die("<br>Bind LDAP server error");
}
$filter = 'samaccountname=' . $userid;
$attributes = array('mail');
$result = ldap_search($conn, $base_dn, $filter, $attributes);
$info = ldap_get_entries($conn, $result);
if(!$result){
die("<br>Search failed");
}
if($info["count"] != 0){
$user_dn = $info[0]["dn"];
unset($bind2);
$bind2 = @ldap_bind($conn, $user_dn, $user_password);
if($bind2){
// Login done. Set session
}
}
ldap_close($conn);
}
Related posts:
6 Responses to “PHP LDAP连接微软活动目录进行身份验证”
Pages:
Leave a Reply

2007-06-19 at 16:29:42
您好!,我在使用是出现如下错误:
Warning: ldap_search() [function.ldap-search]: Search: Operations error
请问是什么原因?
2007-06-19 at 16:40:41
确认你的服务器地址, 用户名, 密码, base_cn都设置对了, 如果不确定, 询问网络管理员.
2007-06-19 at 17:20:24
thanks!用户名前面加上域名就可以。但是在LDAP_Searth行出现错误:Warning: ldap_search() [function.ldap-search]: Search: No such object
base_dn我用LDAP工具测试正确,是filter或attributes有错误?
2007-06-19 at 17:40:54
我们在email里交谈, 我的email是 ideawu在163,com. 你用email把问题描述清楚, 最好在email贴出完整的代码.
2007-07-06 at 11:38:40
有两个问题想请教:
$attributes = array(‘mail’);
请问这是什么意思,一定要写这行代码吗?
$result = ldap_search($conn, $base_dn, $filter, $attributes);
这种搜索是不是查找整个目录,如想特定查找某个目录,怎么写?
谢谢!
2011-09-02 at 15:46:44
请教,我用的只有ldap_connect和 ldap_bind俩个函数,ldap_bind连接上就算登录成功不可以吗?但是ldap_bind这个函数 用普通用户连接不上是什么原因?