我根据http://symfony.com/doc/2.0/cookbook/security/custom_authentication_provider.html创建了自己的身份验证,效果很好。
但现在我需要有两个身份验证提供程序。 AuthenticationProviderManager支持此功能,但我无法了解如何将第二个身份验证提供程序添加到我的安全工厂。
我的代码:
security.yml
firewalls:
wsse_secured:
pattern: /api/.*
wsse: true
WsseFactory.php
class WsseFactory implements SecurityFactoryInterface
{
public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint)
{
$providerId = 'security.authentication.provider.wsse.'.$id;
$container
->setDefinition(
$providerId,
new DefinitionDecorator(
'wsse.security.authentication.provider'
)
)
->replaceArgument(
0,
new Reference($userProvider)
);
$listenerId = 'security.authentication.listener.wsse.'.$id;
$container->setDefinition(
$listenerId,
new DefinitionDecorator(
'wsse.security.authentication.listener'
)
);
return array($providerId, $listenerId, $defaultEntryPoint);
}
public function getPosition()
{
return 'pre_auth';
}
public function getKey()
{
return 'wsse';
}
public function addConfiguration(NodeDefinition $node)
{
}
}
services.yml:
wsse.security.authentication.provider:
class: LD\BinaryBackendBundle\Security\Authentication\Provider\WsseProvider
arguments: ['', %kernel.cache_dir%/security/nonces]
wsse.security.authentication.listener:
class: LD\BinaryBackendBundle\Security\Firewall\WsseListener
arguments: [@security.context, @security.authentication.manager, @logger]
因此,您可以看到我有一个身份验证提供程序注册。我怎样才能添加第二个?
答案 0 :(得分:2)
您可以添加一个auth提供程序,只需将其添加到防火墙配置中,如果一个失败则将其传递给另一个,
例如在我的应用程序中我使用了来自HWIOAuthBundle的form_login和oauth,这是我在security.yml中的防火墙:
firewalls:
main:
pattern: ^/
logout: true
anonymous: true
form_login:
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
default_target_path: /manager/
logout:
path: /logout
target: /
oauth:
resource_owners:
google: /login/check-google
facebook: /login/check-facebook
twitter: /login/check-twitter
default_target_path: /manager/
login_path: /login
failure_path: /login
oauth_user_provider:
service: oauth_user_provider
因此,根据网址,它使用一个身份验证提供程序或另一个。