我正在尝试与活动目录建立连接以对用户进行身份验证。 然而,无论你输入什么内容都无关紧要,因为无论如何都会让你陷入困境。
我甚至不确定我是否建立了正确的连接。 作为主机名,我目前使用[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>
答案 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:1234
或ldaps://192.168.1.1:4567
)的单个参数进行调用。停止使用它有两个参数hostname
和port
,因为它已被弃用,并且可能会在更高版本的PHP中删除,因为无法将其用于安全连接。始终将其称为ldap_connect('ldap://ldap.example.com:1234');
!