LDAP: Usar modelo propio para construir formulario de login (Sin la convención: _username, _password)

73 views
Skip to first unread message

Félix Roberto Aballí Morell

unread,
Dec 24, 2014, 3:24:06 PM12/24/14
to symfo...@googlegroups.com
Hola:
Me encuentro desarrollando un Bundle para autenticar con Ldap en mi empresa.

Problema: Sólo mediante convención (_username_password, en campos input) llegan valores a LdapAuthenticator.
De lo contrario, si uso mi LoginModel y LoginType, no funciona.


He utilizado las referencias siguientes:


Para construir mi LdapBundle necesito:

- LdapAuthenticator
- LdapUserProvider
- LdapUser
- LdapConnection
- LoginModel (username, password; distintos a la convención: _username, _password)
- LoginType

Dentro de LdapAuthenticator, existe un método que es necesario redefinir, 
dado que el firewall redirecciona hacia allá cuando se ingresan los datos del formulario de login:

public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
try {                     
  
                          /** ---------   Acá necesito: Obtener usuario y contraseña para autenticar con LDAP        --------------*/
 

$user = $userProvider->loadUserByUsername($token->getUsername());


} catch (UsernameNotFoundException $e) {
throw new AuthenticationException('Invalid username or password');
}

$passwordValid = $this->encoder->isPasswordValid($user, $token->getCredentials());
if ($passwordValid) {

return new UsernamePasswordToken(
$user,
$user->getPassword(),
$providerKey,
$user->getRoles()
);
}

throw new AuthenticationException('Invalid username or password');
}

magarzon

unread,
Dec 28, 2014, 9:49:19 PM12/28/14
to symfo...@googlegroups.com
¿Cómo es tu configuración de firewall en security.yml?

Porque si usas form_login o simple_form (para utilizar tu propio password authenticator, como en el ejemplo que enlazas), se utiliza el UsernamePasswordFormAuthenticatorListener, que es donde se recoge el username y password como _username y _password y que es fácil de cambiar, especificando en la configuración de form_login o simple_form los parámetros username_parameter = username y password_parameter: password

Por ejemplo:

firewalls:
    secured:
        simple_form:
               authenticator: ldap_authenticator
               username_parameter: username
               password_parameter: password
Reply all
Reply to author
Forward
0 new messages