【发布时间】: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";
?>
【问题讨论】: