【问题标题】:PHP Warning: ldap_bind(): Unable to bind to server: invalid credentialsPHP 警告:ldap_bind():无法绑定到服务器:凭据无效
【发布时间】:2021-03-02 18:05:51
【问题描述】:

您好,所有正在阅读本文的人。所以让我先解释一下我的问题,我会附上下面的代码。 我在 windows server 2016 上使用 xampp apache 服务器和微软活动目录域服务(都在同一个虚拟机上)。我自己不是程序员,但我想做的是使用 PHP 来尝试对我的活动目录中的用户进行身份验证。起初代码有效,当我输入正确的用户名和密码时,它显示已通过身份验证,这只发生了一次。现在,每当我尝试进行身份验证时,即使用户名和密码完全正确,它也会一直给我无法绑定到 ldap 服务器和无效凭据的相同错误。在此之前,我使用了一个代码,该代码使用一个硬编码的用户凭据来绑定和其他硬编码的用户凭据,我从 AD 中获取谁的信息,并且该代码工作正常,但上面提到的其他场景却没有。请帮助

(我正在使用的单独的 html 表单文件)

<html>
</head><style>
body {text-align:center;}
form {margin: 0 auto;width:500px;}
input {padding:10px; font-size:20;}
</head></style>
</body>
<h1>Authentication With Active Directory</h1>
<form action="ldap.php" method="post">
<input type="text" name="username" /><br>
<input type="password" name="password" /><br>
<input type="submit" value="login" />
</form>
</body>
</html>

(我的 php 文件都存储在 c:/xampp/htdocs/ 中)

<?php



$ldap_dn = "CN=".$_POST["username"].",DC=example,DC=example";
$ldap_password = $_POST["password"];

$ldap_con = ldap_connect("example");
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);

if(ldap_bind(@$ldap_con,$ldap_dn,$ldap_password))
{
echo "Authenticated";
}
else
{
echo "Invalid Credential";
 }


?>

(我也尝试过以下代码来检查是否建立了连接并且连接确实建立了,但它仍然提供无效的凭据。我认为我的代码中的绑定有问题但无法弄清楚)

<?php

$username; $password;

$ldap_dn = "CN=".$_POST["username"].",DC=ADLAB,DC=local";
$ldap_password = $_POST["password"];

$ldap_con = ldap_connect("ADLAB.ADLAB.local");
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);

如果 ($ldap_con) { echo "连接建立";

if(ldap_bind(@$ldap_con,$ldap_dn,$ldap_password))
{
echo "Authenticated";
}
else
{echo "Invalid Credential";
     }
}
else
echo "conection failed";

?>

【问题讨论】:

    标签: php ldap bind


    【解决方案1】:

    所有 Active Directory 都提供内部电子邮件(例如:username@domain.dom)。您可以使用它通过 LDAP 绑定对用户进行身份验证。

    使用前,用户提供的值,验证它不包含无效字符。见preg_matchhttps://www.php.net/manual/en/function.preg-match

    注意:密码必须包含一个字符。如果未指定密码或密码为空,则尝试匿名绑定。见:https://www.php.net/manual/en/function.ldap-bind.php

        <?php
    $username = $_POST['username'];
    $ldap_password = $_POST['password'];
    $ldap_dn = $username.'@ADLAB.local';
    
    if (empty($username) || empty($ldap_password) || !preg_match('/^[A-Za-z0-9\-_]$/', $username)) {
    die("Invalid credential");
    }
    
    $ldap_con = ldap_connect("ADLAB.ADLAB.local");
    ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
    if ($ldap_con) { echo "connection established";
    
    if(ldap_bind(@$ldap_con,$ldap_dn,$ldap_password))
    {
    echo "Authenticated";
    }
    else
    {echo "Invalid Credential";
         }
    }
    else
    echo "conection failed";
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2011-04-13
      • 1970-01-01
      相关资源
      最近更新 更多