您的位置:首页 > 编程语言 > PHP开发

PHP操作AD域入门(二)

2015-11-25 13:52 1026 查看

PHP操作AD域

在设计公司内部的员工服务平台时,需要实现员工通过自己的域账号登录该平台的功能。这就需要改变原先的php+mysql的登录验证模式,需要思考以下几点:

如何进行账号密码验证?是跟原来的操作一样——从服务器上取出用户名密码与前端返回的值相比较?

如何实现我们需要的操作?

域服务器为了保证安全性是不会向我们提供用户的密码的,所以我们无法直接取到密码来用作比较。在这里,一个可行的方法是将账号密码验证的任务交由域服务器处理,我们只需要等待返回值的成功与否就可以。(这让我想到了某些平台的“使用第三方登录”的功能,最终的验证还是要交由“第三方”来实现)。

AD域是建立在ldap协议之上的。与操作mysql相似,PHP为我们提供了操作ldap的函数库。那么我们就可以据此来实现对AD的访问操作。

$host = "ldap://10.0.0.2";
$port = 389;

//连接到LDAP服务器
if(!@$connection = ldap_connect($host, $port))
{
echo 1;     //失败则返回错误代码1,并退出。
exit();
}

//声明使用版本3
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
//使用start TLS安全通信机制
ldap_start_tls($connection);

//绑定,相当于用户登录
if(!@ldap_bind($connection, "SYNTHFLEX\\".$username, $password))
{
echo -1;    //失败则返回错误代码-1,并退出。
exit();
}
echo 0;   //成功,返回0


接下来可以对域服务器上的信息进行查找

//获取LDAP数据
$dn = "cn=USERS, dc=synthflex, dc=com";      //dn路径
$filter = "(samaccountname=$username)";      //筛选器
$attributes = array('sn','givenname');       //所要获取的项的名称
$result_ldap = ldap_search($connection, $dn, $filter, $attributes);


以上的代码功能是获取dn=“cn=USERS, dc=synthflex, dc=com”,登录名(samaccountname)为$username的记录中“姓(sn)”和“名(givenname)”两项的值。

Tips:ldap_search的参数规范

$dn的类型是字符串,与php中的mysql_query不同,该字符串中的“=”后的值不需要用单引号括起来。如
$dn = "cn='USERS', dc='synthflex', dc='com'";
是错误的。

$filter则必须要用“()”将筛选器的代码括起来,这是windows下的AD的特殊规范。

$attributes参数类型是数组,切记。

更多有关AD域中的属性值如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: