我想使用2个simple_preauth身份验证器,其中一个应该是后备。当使用不同类型的几个Authenticator时,这是有效的:
还为此目的实现了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)?
答案 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}}