Próbuję napisać niestandardowy dostawca uwierzytelniania dla uwierzytelniania LDAP, korzystając z dokumentacji Silex - Defining a custom Authentication Provider.Niestandardowy dostawca uwierzytelniania w aplikacji silex
Ale jeśli spojrzę w $app['security.authentication_providers']
, są dwaj dostawcy. Jeden, który zdefiniowałem App\LdapAuthenticationProvider
i jeden Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider
I gdy próbuję zezwolić użytkownikowi otrzymuję błąd, ponieważ nie ma połączenia z App\LdapUserProvider::loadUserByUsername()
z klasy DaoAuthenticationProvider.
Jeśli miałbym tylko jednego dostawcę w $app['security.authentication_providers']
Myślę, że nie powinienem dostać błędu, ponieważ mój dostawca LDAP nie wywołuje loadUserByUsername.
Oto zrzut $app['security.authentication_providers']
array (size=2)
0 => object(App\LdapAuthenticationProvider)[194]
private 'userProvider' =>
object(App\LdapUserProvider)[176]
private 'ldap' => resource(57, ldap link)
private 'defaultRoles' =>
array (size=1)
...
private 'providerKey' => string 'default' (length=7)
1 => object(Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider)[195]
private 'encoderFactory' =>
object(Symfony\Component\Security\Core\Encoder\EncoderFactory)[197]
private 'encoders' =>
array (size=1)
...
private 'userProvider' =>
object(App\LdapUserProvider)[176]
private 'ldap' => resource(57, ldap link)
private 'defaultRoles' =>
array (size=1)
...
private 'hideUserNotFoundExceptions' (Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider) => boolean true
private 'userChecker' (Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider) => object(Symfony\Component\Security\Core\User\UserChecker)[196]
private 'providerKey' (Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider) => string 'default' (length=7)
tak, to czy ktoś wie, dlaczego istnieje dodatkowy dostawca i jak mogę się go pozbyć?
Istnieją kody dla bootstraping application, LdapAuthenticationListener i LdapAuthenticationProvider.
Jednak nadal nie można zrozumieć, dlaczego '' $ app ['security.authentication_providers'] '' ma dwóch dostawców. – vansanblch
Czy możesz opublikować ostateczny kod, który zrobiłeś? – heapOverflow
Niestety nie mogę. Ten projekt został wycofany i nie mam do niego dostępu. Ale głównym pomysłem było napisanie poprawnej LdapAuthenticationListener, którą zarchiwizowałem poprzez rozszerzenie jej z UsernamePasswordFormAuthenticationListener. I istnieje kod w bootstrapie, aby zarejestrować nową fabrykę do obsługi uwierzytelniania LDAP. Spójrz również na kod w pastebin, linku można znaleźć w pierwszym komentarzu. Myślę, że nie zmieniłem zbytnio kodu w tych klasach. – vansanblch