gpt4 book ai didi

php - LDAP 身份验证的 DN 语法无效

转载 作者:行者123 更新时间:2023-12-05 04:16:47 25 4
gpt4 key购买 nike

我知道以前有人回答过这个问题,但它无法帮助我(除非它有帮助,但由于我的 php 知识有限,它没有帮助)。下面是我的代码:

<body>
<html>

<?php
//echo var_dump($_POST);
$user = "".$_POST["username"]."";
settype($user, "string");
$password = $_POST["password"];
$ldap_host = "ldap.burnside.school.nz";
$base_dn = "ou=students,o=bhs";
$ldap_user = "(cn=".$user.")";
$filter = "($ldap_user)"; // Just results for this user
$ldap_pass = "".$password."";

$connect = ldap_connect($ldap_host)
or exit(">>Could not connect to LDAP server<<");
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

// This next bit is the important step. Bind, or fail to bind. This tests the username/password.
if (ldap_bind($connect, $ldap_user.",".$base_dn, $ldap_pass)) {
$read = ldap_search($connect, $base_dn, $filter)
or exit(">>Unable to search ldap server<<");

// All the next 8 lines do is get the users first name. Not required
$info = ldap_get_entries($connect, $read);
$ii = 0;
for ($i = 0; $ii < $info[$i]["count"]; $ii++) {
$data = $info[$i][$ii];
if ($data == "givenname") {
$name = $info[$i][$data][0];
}
}

ldap_close($connect);
header("Location: success.php?name=$name");
}
else {
ldap_close($connect);
//header("Location: failure.php?user=$user");
}
?>

</body>
</html>

我在第 21 行遇到错误,当我绑定(bind)到服务器时说:

Warning: ldap_bind(): Unable to bind to server: Invalid DN syntax in S:\XAMPP\htdocs\PhpProject1\LDAP_main.php on line 21

有人能解决这个问题吗?当我将我的 $_POST 实现到代码中以接收用户名和密码时,它才开始发生,但正如你可以看到我注释掉的 //echo var_dump($_POST) 我实际上收到了我想要的数据。

最佳答案

用于绑定(bind)到 LDAP 服务器的 DN 是 (cn=[username]),ou=students,o=bhs,这不是有效的 DN 语法。那应该是 cn=[username],ou=students,o=bhs 没有大括号。

您将 LDAP 过滤器(大括号内的内容)与 DN 混淆了。

我将通过以下方式进行 LDAP 身份验证:

  1. 匿名绑定(bind)或与您知道 DN 的默认用户绑定(bind)
  2. 使用该用户搜索与包含所提供用户名的特定过滤器相匹配的所有用户。您可以使用像 (|(mail=[username])(cn=[username])(uid=[username])) 这样的过滤器来查找邮件中包含用户名 cn 的条目或 uid 属性
  3. 从返回的条目中获取 DN(如果没有或不止一个条目,则表示不存在合适的用户,因此我们可以跳过其余部分)
  4. 使用检索到的 DN 和提供的密码再次绑定(bind)到 ldap。

看看https://gist.github.com/heiglandreas/5689592

关于php - LDAP 身份验证的 DN 语法无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com