如何在Symfony2中注册多个身份验证提供程序?

如何在Symfony2中注册多个身份验证提供程序?,symfony,Symfony,我基于:创建了自己的身份验证,而且效果很好 但是现在我需要两个身份验证提供者。AuthenticationProviderManager支持此功能,但我无法找到如何将第二个身份验证提供程序添加到我的安全工厂 我的代码: security.yml firewalls: wsse_secured: pattern: /api/.* wsse: true WsseFactory.php class WsseFactory implements Sec

我基于:创建了自己的身份验证,而且效果很好

但是现在我需要两个身份验证提供者。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]

正如您所看到的,我有一个身份验证提供程序寄存器。如何添加第二个身份验证提供程序?

您可以添加一个身份验证提供程序,只需将其添加到防火墙配置中,如果其中一个失败,它将传递给另一个

例如,在我的应用程序中,我使用来自的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

因此,根据url,它使用一个或另一个身份验证提供程序。

我尝试使用simple\u form和simple\u preauth,但总是simple\u preauth先尝试