0

我正在为一所大学做一个项目。大学要求所有使用登录名/信息都存储在 LDAP 中并通过 PHP 检索。通常我只会将 LDAP 连接与用户输入的凭据绑定(因此个人用户的用户名和密码),但是现在我需要使用 LDAP 验证他们的用户名/密码,然后使用“授权帐户”重新绑定连接" 部门提供的用户名和密码,然后从经过身份验证的帐户执行 LDAP 搜索。

基本上我需要使用用户的登录名/密码来确保它们存在于 LDAP 中。如果是,那么我们必须切换到不同的帐户用户名/密码来执行用户信息的 LDAP 搜索。

我该怎么做?我不知道如何以这种方式重新绑定,但仍然对用户执行正确的搜索。

编辑:重新绑定 LDAP 帐户是否像在第一个绑定语句之后包含第二个绑定语句一样简单?前任;

if (!($bind=@ldap_bind($connect, "uid=".$username.",ou=*****,dc=***,dc=edu", "$password")))
{
    ldap_close($connect);
    echo "there was an error binding your LDAP account.";
}
else // else we have binded to the ldap connection as the user, we must re-bind as the authorized account
{
    if (!($bind=@ldap_bind($connect, "uid=".$authUN.",ou=******,dc=***,dc=edu", "$authPW")))
    {
            ldap_close($connect);
            echo "There was a problem binding to the authorized account.";
    }
    else // now we have binded with the authenticated account
    {
        echo "success!";
    }
}    

..然后我会通过正常执行搜索ldap_search()

4

3 回答 3

2
  • 没有“重新绑定”之类的东西。只有 BIND
  • 连接以匿名身份验证状态开始
  • 每个 BIND 请求都会将连接状态重置为匿名状态
  • 每个成功的 BIND 都将连接状态设置为与身份验证 ID 关联的授权状态
  • 失败的 BIND 请求导致连接保持匿名状态

BIND 的语义在RFC4513中有完整的描述。

于 2012-08-23T20:06:47.907 回答
0

为什么不直接用授权账户搜索用户信息,如果存在则返回,如果不直接忽略呢?

于 2012-08-23T18:17:33.513 回答
0

我对这些答案中的任何一个都不满意。可以在同一连接上重新绑定,但它仍然是 BIND。python-ldap3 模块有一个专门用于此的方法,称为“重新绑定”。此外,在校园或公司环境中,通常需要(如我的情况)首先通过管理员凭据绑定,然后重新绑定或再次绑定以使用提供的用户凭据对用户进行身份验证。

于 2018-07-13T17:42:06.753 回答