diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
index 3e4dfaed0e..f9e44dd74e 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php
@@ -156,7 +156,9 @@ class Configuration
->prototype('scalar')->end()
->end()
->end()
- ->booleanNode('anonymous')->defaultFalse()->end()
+ ->arrayNode('anonymous')
+ ->scalarNode('key')->defaultValue(function () { return uniqid(); })->end()
+ ->end()
->arrayNode('switch_user')
->scalarNode('provider')->end()
->scalarNode('parameter')->defaultValue('_switch_user')->end()
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
index 8666053d8f..62571051f5 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php
@@ -345,9 +345,22 @@ class SecurityExtension extends Extension
}
// Anonymous
- if ($firewall['anonymous']) {
- $listeners[] = new Reference('security.authentication.listener.anonymous');
- $authenticationProviders[] = 'security.authentication.provider.anonymous';
+ if (isset($firewall['anonymous'])) {
+ $listenerId = 'security.authentication.listener.anonymous.'.$id;
+ $container
+ ->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.anonymous'))
+ ->setArgument(1, $firewall['anonymous']['key'])
+ ;
+
+ $listeners[] = new Reference($listenerId);
+
+ $providerId = 'security.authentication.provider.anonymous.'.$id;
+ $container
+ ->setDefinition($providerId, new DefinitionDecorator('security.authentication.provider.anonymous'))
+ ->setArgument(0, $firewall['anonymous']['key'])
+ ;
+
+ $authenticationProviders[] = $providerId;
$hasListeners = true;
}
diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
index a837c4ad33..2f5063f826 100644
--- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
+++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml
@@ -37,18 +37,17 @@
Symfony\Component\Security\Core\Authentication\Provider\PreAuthenticatedAuthenticationProvider
Symfony\Component\Security\Core\Authentication\Provider\AnonymousAuthenticationProvider
- SomeRandomValue
- %security.anonymous.key%
+
- %security.anonymous.key%
+
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php
index ba6e96b0cf..a3cccf1a00 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php
@@ -83,7 +83,7 @@ abstract class SecurityExtensionTest extends \PHPUnit_Framework_TestCase
'security.authentication.listener.form.secure',
'security.authentication.listener.basic.secure',
'security.authentication.listener.digest.secure',
- 'security.authentication.listener.anonymous',
+ 'security.authentication.listener.anonymous.secure',
'security.access_listener',
'security.authentication.switchuser_listener.secure',
),