【发布时间】:2013-06-06 16:32:19
【问题描述】:
我正在尝试创建一个用户提供程序,以便我可以通过 Active Directory 服务器进行身份验证。
问题在于,与大多数其他 LDAP 服务器不同,Active Directory 不允许检索某些用户的密码属性,即使是加密的。
这是我的用户类:
class LdapUser implements UserInterface
{
private $username;
private $first_name;
private $last_name;
private $password;
private $salt;
private $roles;
public function __construct($username, $first_name, $last_name, $password, $salt, array $roles) {
$this->username = $username;
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->password = $password;
$this->salt = $salt;
$this->roles = $roles;
}
...
}
这是我的loadUserByUsername 方法(在我的UserProvider 类中):
public function loadUserByUsername($username)
{
$server = "my_ldap_server";
$root_dn = "my_root_dn";
$root_pw = "my_root_pw";
$ds = ldap_connect($server);
if ($ds) {
ldap_bind($ds, $root_dn, $root_pw);
$search = ldap_search($ds, "my_branch", "(sAMAccountName=".$username.")", array("sn", "givenName"));
$info = ldap_get_entries($ds, $sr);
if($info['count'] > 0) {
$user = $info[0];
return new LdapUser($username, $user['givenName'][0], $user['sn'][0], '???PASSWORD???', '???SALT???', array('ROLE_USER'));
} else {
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
}
ldap_close($ds);
} else {
echo "Connexion au serveur LDAP impossible";
}
}
如您所见,我无法将密码传递给我的 LdapUser 类,因为它无法通过 Active Directory 访问。
但是,我认为仍然可以验证用户身份,方法是使用用户在登录表单中输入的密码执行ldap_bind($username, $password)。问题是我不知道如何在我的 LdapUserProvider 类中访问此密码。
我尝试了$_POST['password'],但出现未定义索引错误...
欢迎任何帮助:)
【问题讨论】:
标签: authentication active-directory symfony ldap