如何使用Symfony2获取普通密码用户?

时间:2014-04-25 09:04:24

标签: symfony active-directory passwords ldap

我必须获取LDAP验证的用户普通密码,然后使用Symfony2检索Active Directory中的LDAP用户信息。

/**
 * @Route("/infos-profil/{id}", name="infos_profil")
 * @Template()
 */
public function infosProfilAction($id)
{
    $em = $this->getDoctrine()->getManager();
    $user = $em->getRepository('MyUserBundle:LdapUser')->find($id); // Find User Entity
    if (!$user) {
        throw $this->createNotFoundException('Unable to find LdapUser entity.');
    }
    $login = $user->getUsername(); // Login
    $pass = $user->getPlainPassword(); // Password
    $ds = ldap_connect("12.34.56.789");  // Domain connexion
    if ($ds) {
        $r = ldap_bind($ds, $login, $pass); // LDAP User connexion
        if ($r) {
            $filter = "(&(objectClass=user)(samaccountname=".$login.")(cn=*))";
            $sr=ldap_search($ds, "ou=DOMAIN, ou=Test, ou=Users, dc=ats, dc=lan", $filter);
            $info = ldap_get_entries($ds, $sr); // Retrieve user's Active Direcory informations
        }
    }
    return array(
        'user' => $user,
        'info' => $info,
}

但它不起作用,$pass为空。当我在ldap_bind()函数中手动输入普通密码时,它可以正常工作,我只需要获得普通密码! ...

有可能吗?

2 个答案:

答案 0 :(得分:2)

出于明显的安全原因,无法从数据库中检索普通密码。

对于您的问题,您应该按照本教程创建自定义身份验证提供程序:http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

这样,您的提供商将从登录表单中获取普通密码,您就可以将其发送到LDAP服务器。

答案 1 :(得分:2)

您不需要用户密码就可以从活动目录中检索有关这些密码的信息。一旦通过身份验证,只需使用他们的用户名通过LDAP查找,使用匿名连接或失败,即已知的特权帐户。