在Symfony中使用相同类型的几个Authenticator

时间:2014-11-21 16:24:06

标签: php symfony authentication

我想使用2个simple_preauth身份验证器,其中一个应该是后备。当使用不同类型的几个Authenticator时,这是有效的:

http://symfony.com/blog/new-in-symfony-2-4-customize-the-security-features-with-ease#using-several-authenticators-in-a-firewall

还为此目的实现了supportsToken(): http://symfony.com/doc/current/cookbook/security/api_key_authentication.html#supportstoken

我是否遗漏了某些内容或建议的方法,将2个simple_preauth身份验证器添加到防火墙,其中第2个是第1个后备版?或者只有我将其中一个实现为自定义身份验证器(http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html)?

1 个答案:

答案 0 :(得分:1)

您没有错过任何内容 - 您可以为每个防火墙定义一个simple_preauth身份验证器。

但是您有验证者的后备选项:如果验证者实现AuthenticationFailureInterface,则AuthenticationException上的onAuthenticationFailure方法将被称为authenticator::createToken()方法。

http://symfony.com/doc/current/cookbook/security/api_key_authentication.html#handling-authentication-failure https://github.com/symfony/symfony/blob/2.7/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php#L94

此外,您可以自由尝试多种身份验证方式authenticator::authenticateToken()。不要忘记将它们区分为authenticateToken::refreshToken()stateless: false(如果simple_preauth)。

您可以使用自定义身份验证提供程序扩展SimplePreAuthenticationFactory行为,但这是最复杂的方法。它可以是多个自定义身份验证提供程序,具有覆盖的simple_preauth密钥和服务。或者它可以真正为其Listener和Provider实现多个class MultipleSimplePreAuthenticationListener implements ListenerInterface { ... public function handle(GetResponseEvent $event) { foreach ($this->listeners as $listener) { $listener->handle($event) } ... 实现Chain模式。 e.g。

{{1}}