最近离职了,但是踩了坨狗屎,接了一个迈瑞的微信项目,赚了点钱。其中他们要求通过ldap对接自己的用户信息,微信项目这边没有用户的概念。
开发用的是php,但php默认没有开启ldap支持,需要在php.ini中开启ldap支持。
extension=php_ldap.dll //去掉前面的分号
然后重启服务器,报了一个错,没有找到Libsasl.Dll。
将php中libsasl.dll拷到system32中,再次重启,phpinfo可以看到ldap扩展了。
ldap验证代码如下:
- <?php
- class adLDAP {
- protected $_account_suffix = "";
- protected $_base_dn = "dc=mindray,dc=com";
- protected $host = array ("127.0.0.1");
- protected $port = '389';
- protected $_conn;
- function __construct($options=array()){
- if (count($options)>0){
- if (array_key_exists("base_dn",$options)){ $this->_base_dn=$options["base_dn"]; }
- if (array_key_exists("host",$options)){ $this->host=$options["host"]; }
- if (array_key_exists("port",$options)){ $this->port=$options["port"]; }
- }
- if ($this->ldap_supported() === false) {
- echo 'ldap not supported';
- return false;
- }
- return $this->connect();
- }
- function __destruct(){
- $this->close();
- }
- public function connect() {
- $host = $this->random_host();
- $port = $this->port;
- $this->_conn = ldap_connect($host,$port);
- return (true);
- }
- public function close() {
- ldap_close ($this->_conn);
- }
- /**
- * Validate a user's login credentials
- *
- * @param string $username A user's AD username
- * @param string $password A user's AD password
- * @param bool optional $prevent_rebind
- * @return bool
- */
- public function authenticate($username, $password) {
- if (empty($username) || empty($password)) return false;
- $r = @ldap_search( $this->_conn, $this->_base_dn, 'uid=' . $username);
- if ($r) {
- $result = @ldap_get_entries( $this->_conn, $r);
- if ($result[0]) {
- if (@ldap_bind( $this->_conn, $result[0]['dn'], $password) ) {
- //return $result[0];
- return true;
- }
- }
- }
- }
- protected function random_host(){
- mt_srand(doubleval(microtime()) * 100000000); // For older PHP versions
- return ($this->host[array_rand($this->host)]);
- }
- protected function ldap_supported() {
- if (!function_exists('ldap_connect')) {
- return (false);
- }
- return (true);
- }
- }
ps:为有需要的人士分享!