2

我根据以下内容创建了自己的身份验证:http ://symfony.com/doc/2.0/cookbook/security/custom_authentication_provider.html ,效果很好。

但是现在我需要有两个身份验证提供程序。AuthenticationProviderManager 支持这一点,但我不知道如何将第二个身份验证提供程序添加到我的安全工厂。

我的代码:

安全.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)
    {
    }
}

服务.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]

如您所见,我有一个身份验证提供程序注册。如何添加第二个?

4

1 回答 1

2

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

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

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

于 2012-11-21T15:06:17.623 回答