2013-08-12 3 views
1

Я использую Symfony Security с пользовательским поставщиком в моей системе. Он обеспечивает пользователей через веб-службу.
Я настраиваю провайдера в соответствии с этим руководством (http://symfony.com/doc/current/cookbook/security/custom_provider.html).Symfony Security/Пользовательский поставщик: как получить пароль для входа в пользовательский поставщик?

Вот функция, которая проверяет пользователя:

public function loadUserByUsername($username) 
{ 
    $userData = webServiceCheckUser($username); 
    // return an array whit user credentials 
    if ($userData) { 
     $password = $userData['password']; 
     $salt = $userData['salt']; 
     $roles = $userData['roles']; 
     $user = new WebserviceUser($username, $password, $salt, $roles); 
     return $user; 
    } 
    throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username)); 
} 

Это прекрасно работает, функция webServiceCheckUser() вызова веб-службы с именем пользователя, а затем он возвращает массив с данными пользователя. Но теперь мне нужно проверить пользователя через другую веб-службу, для которой требуется имя пользователя и зашифрованный пароль пользователя для его аутентификации. У меня есть функция, которая шифрует пароль обычного текста, например, веб-службу ждет, но я не могу получить пароль, который был введен пользователем в форме входа в пользовательский класс поставщика. Это нормально, если я могу получить пароль, уже зашифрованный. Либо один решает проблему.

Есть так или иначе, чтобы сделать это?

+0

Думайте, что вам нужно написать [поставщик собственной проверки подлинности] (http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html) –

ответ

3

@Pazi правильно, в этом здании будет работать собственный поставщик аутентификации. Однако это непростая задача.

Альтернативный подход заключается в переопределении DaoAuthenticationProvider и передаче пароля функции loadUser.

security_listeners.xml:   
    <parameter key="security.authentication.provider.dao.class"> 
     Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider 
    </parameter> 

Немного взлома, возможно, но это экономит значительную часть работы.

+0

Я вижу. Но это все еще так сложно для меня, потому что я новичок в Symphony. У вас есть ссылка на какой-то пример? – vlamirc

+0

Нет. Безопасность - одна из самых трудных вещей для понимания. Если вам нужно использовать внешнего провайдера, вам просто нужно будет пристегнуть вниз и понять, как работает система. – Cerad