2012-11-21 4 views
2

나는 http://symfony.com/doc/2.0/cookbook/security/custom_authentication_provider.html을 기반으로 내 자신의 인증을 만들었으며 제대로 작동합니다.Symfony2에서 여러 인증 공급자를 등록하는 방법은 무엇입니까?

하지만 지금은 두 개의 인증 공급자가 필요합니다. 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] 

auth 프로 바이더의 레지스터 두 번째를 어떻게 추가 할 수 있습니까?

하나가 다른 하나에 전달 실패하면 당신은 인증 공급자가 바로 방화벽 구성에 추가 추가 할 수 있습니다

답변

1

,

내 응용 프로그램의 예를 들어 나는 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에 따라 하나의 인증 제공자를 사용합니다.

+0

나는 simple_form 및 simple_preauth로 시도하고 있지만 항상 simple_preauth로 먼저 시도합니다. – rkmax

관련 문제