PHP ldap连接总是如此

时间:2016-09-08 06:48:30

标签: php active-directory ldap

我正在尝试与活动目录建立连接以对用户进行身份验证。 然而,无论你输入什么内容都无关紧要,因为无论如何都会让你陷入困境。

我甚至不确定我是否建立了正确的连接。 作为主机名,我目前使用[ip adress]。[domain] .nl 我不知道这是否可行,但是当我检查ldap_connect()是否有错误时,它并没有出现错误。

所以,如果你们想查看代码并给我提示,那就太棒了。出于安全原因,我遗漏了连接细节。

是的,如果这是一个愚蠢的问题,但我知道什么是错的。 提前谢谢。

class LOGIN{
        public function login($data){

            $user = $data["username"];
            $password = $data["password"];
            $host = 'ldap://[ip adress]/[domain].nl';
            $domain = '[domain].nl';
            $basedn = 'dc=[domain],dc=nl';

            $ad = ldap_connect($host.$domain,389) or die('Could not connect to LDAP server.');

            ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
            ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);

            //$bind = ldap_bind($ad, "$user@$domain", $password) or die('Could not bind to AD.');

            if(@ldap_bind($ad, "$user"."@"."$domain", $password)){

                $result = "Authenticated";

            }else{
                $result = "Invalid Credential";
            }               

            return $result;
        }
    }
}

$login = new LOGIN; 

这是登录的表格:

<?php 
if(isset($_POST['username']) && isset($_POST['password']) && !empty($_POST['username']) && !empty($_POST['password'])){

require_once("classes/class_login.php");

$result = $login->login($_POST);

}   
?>

<form action="#" method="POST">
    <?php if(!empty($result)){echo "<p>".$result."</p>";} ?>
    <pre>
    <label for="username">Username: </label><input id="username" type="text" name="username" /> 
    <label for="password">Password: </label><input id="password" type="password" name="password" />       

    <input type="submit" name="submit" value="Submit" />
    </pre>
</form>

2 个答案:

答案 0 :(得分:0)

你是对的,api可能有问题,它总是返回true。这是我们使用的工作实现。

    define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
    $conn = "ldap://whatever.com";   // 
    $port = "389";        // by default port 389
    $version = "3";       // by default 3
    $referral = "0"; // by default 0
    $user = "username";
    $password = "password";

    if ($user && $password) {
        //Connect LDAP Server
        echo " connecting to ldap mdec<br/> ";
        $connect = ldap_connect($conn, $port);
        ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, $version);
        ldap_set_option($connect, LDAP_OPT_REFERRALS, $referral);

        $bind = ldap_bind($connect, $user, $password);
        if ($bind) {
            echo "OK. ";
        } else {
            echo "couldn't bind.";
            if (ldap_get_option($connect, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error)) {
                echo "Error connecting to LDAP: $extended_error";
            } else {
                echo "Error connecting to LDAP: No additional information is available.";
            }
        }
        ldap_close($connect);
    } else {
        echo "in else, do whatever you want to show to the user";
   }

答案 1 :(得分:0)

ldap_connect获取提供的URI并检查它的语法正确性。 建立与服务器的连接!

实际连接将在第一次调用服务器时创建(通常为ldap_bind),因此连接问题可能会出现在ldap_bind命令中!

除此之外,ldap_connect应该使用包含LDAP-URI(如ldap://ldap.example.com:1234ldaps://192.168.1.1:4567)的单个参数进行调用。停止使用它有两个参数hostnameport,因为它已被弃用,并且可能会在更高版本的PHP中删除,因为无法将其用于安全连接。始终将其称为ldap_connect('ldap://ldap.example.com:1234');