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域中的属性值如下:
相关文章推荐
- yii2-用户登录验证
- PHP底层的运行机制与原理
- 公用Laravel 5框架与公用库架构
- thinkphp中的where()方法
- 在阿里云的ECS上部署Laravel项目
- php升级
- 仿网易评论盖楼PHP+Mysql实现
- Thinkphp结合dropzone.js做上传功能
- laravel5——artisan开发
- php强制下载文件、文件强制下载、输出强制下载
- PHP操作AD域入门(一)
- php踩坑
- thinkphp中神奇的create()方法
- php工程师的发展
- PHP5 mcrypt php5enmod
- 如何部署laravel到主机空间
- PHP中php://input 和$_POST的区别
- php手记-根据类名获得类的定义(get_class_methods、get_class_vars...)
- php url decode问题:+被转义成空格问题
- php 存PDF文件及其在线预览功能