我必须获取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()
函数中手动输入普通密码时,它可以正常工作,我只需要获得普通密码! ...
有可能吗?
答案 0 :(得分:2)
出于明显的安全原因,无法从数据库中检索普通密码。
对于您的问题,您应该按照本教程创建自定义身份验证提供程序:http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html
这样,您的提供商将从登录表单中获取普通密码,您就可以将其发送到LDAP服务器。
答案 1 :(得分:2)
您不需要用户密码就可以从活动目录中检索有关这些密码的信息。一旦通过身份验证,只需使用他们的用户名通过LDAP查找,使用匿名连接或失败,即已知的特权帐户。