0

在我工作的地方,我们使用匿名目录访问,因为某些 smtp 服务器需要它。我不知道具体情况。对于我正在处理的项目,我想使用活动目录登录。我遇到的问题,我无法检查 ldap == true 因为它/总是/等于 true。此外,我正在完成整个登录并在没有 javascript 的情况下在一页上显示内容。

这是我所做的:

$adServer = 'ipaddress';
$ldapconn = ldap_connect($adServer)
or $this->msg = "Could not connect to LDAP server.";
//Begin magic to compensate for anonymous directory access while still locking out anonymous users
if($_POST["password"] == null)
{
$password = "invalid";
}
else $password = $_POST["password"];
$ldaprdn = "domain\\" . $_POST["username"];
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $password);

if($ldapbind) {
$loggedin = true;
}
elseif(isset($_POST["password"]) && !$_POST["password"] == null) {
$msg = "Incorrect username or password";
$loggedin = false;
}
else {$loggedin = false;}

基本上是用假密码硬编码,然后等待登录表单传入真实密码。该系统有效,但我想知道是否有更清洁/更简单/更快的方法来做到这一点。

4

2 回答 2

0

这个问题与此无关,ldap而是一个更通用的问题,例如:如何在 PHP 中进行表单验证?

if (isset($_POST["password"]) === false) {
    throw new Exception("Missing input");
}
if (is_string($_POST["password"]) === false) {
    throw new Exception("Bad input");
}
// now you now password exists, and it's a string so you can pass it to ldap
于 2013-10-30T17:00:17.107 回答
0

当客户端连接到 LDAP 目录服务器时,该连接处于未经身份验证的授权状态。LDAP 客户端可以使用 BIND 请求请求服务器将连接的授权状态更改为与 BIND 请求中的信息相关联的状态(在简单 BIND 请求中,唯一的信息是 DN 和密码)。成功更改连接的授权状态后,将使用该授权状态对该连接进行进一步的操作,直到:

  • 新的 BIND 请求到达连接
  • 连接由客户端或服务器终止。

这就是“身份验证”与 LDAP 一起工作的方式。您已经或多或少地将它封装在代码片段中,尽管您没有检查可能随 BIND 响应到达的响应控件。

也可以看看

于 2013-10-31T00:30:02.200 回答