使用curl进行PHP和LDAP身份验证

时间:2017-09-29 10:46:58

标签: php curl

有没有办法可以通过LDAP验证用户但不使用php的LDAP模块?不幸的是,大多数共享主机似乎没有ldap模块。我目前在我的localhost上使用ldap模块进行了以下工作,但是希望用cURL或file_get_contents等替代方法实现相同的功能。

$ldap_connect = ldap_connect("server.ip", 389);
ldap_set_option($ldap_connect, LDAP_OPT_NETWORK_TIMEOUT, 4);  

        $ldap_fqdn_user=$samaccountname. "@" . $ldap_domain; 

        if (!($bind = ldap_bind($ldap_connect, $ldap_fqdn_user, $ldap_password))) { 
            ldap_close($ldap_connect);
            echo "Incorrect Username or Password"; 
        } else {
            ldap_close($ldap_connect);
            echo "Correct username and password";
        }

1 个答案:

答案 0 :(得分:1)

幸运的是,curl对LDAP有本机支持。我自己从未使用过它,但我认为等效的curl_setopt将是

curl_setopt_array ( $ch, array (
        CURLOPT_PROTOCOLS => CURLPROTO_LDAP,
        CURLOPT_PORT => 389,
        CURLOPT_URL => 'server.ip',
        CURLOPT_TIMEOUT => 4,
        CURLOPT_USERPWD => $ldap_fqdn_user . ':' . $ldap_password 
) );

这是一个完整的例子,用卷曲检查密码是否正确,

<?php
declare(strict_types = 1);
header ( "content-type: text/plain;charset=utf8" );
$ch = curl_init ();
curl_setopt_array ( $ch, array (
        CURLOPT_PROTOCOLS => CURLPROTO_LDAP,
        CURLOPT_PORT => 389,
        CURLOPT_URL => 'ldap.forumsys.com',
        CURLOPT_TIMEOUT => 4,
        CURLOPT_USERPWD => 'cn=read-only-admin,dc=example,dc=com:password' 
) );
if (curl_exec ( $ch )) {
    echo "correct password";
} else {
    echo "maybe wrong password? curl got an error. errno:" . curl_errno ( $ch ) . '. error: ' . curl_error ( $ch );
}
curl_close ( $ch );
例如,

将密码更改为paswordd,然后它就会失败。 (第10行)

并感谢http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/提供公共测试服务器