Я пытаюсь создать провайдера пользователя, чтобы я мог проходить аутентификацию через сервер 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']
, но получил неопределенную ошибку индекса ...
Любая помощьбудет приветствоваться:)