如何使用授权帐户重新绑定到LDAP?

时间:2012-08-23 17:06:06

标签: php authentication ldap

我正在为一所大学开展一个项目。大学要求所有使用登录/信息都存储在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()正常执行搜索?

3 个答案:

答案 0 :(得分:2)

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

BIND的语义在RFC4513中有详细描述。

答案 1 :(得分:0)

为什么不直接使用授权帐户搜索用户信息,如果存在则返回,如果不是,请忽略它?

答案 2 :(得分:0)

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