Skip to content

Commit 213381e

Browse files
committed
bug #46054 [SecurityBundle] Use config's secret in remember-me signatures (jderusse)
This PR was merged into the 5.4 branch. Discussion ---------- [SecurityBundle] Use config's secret in remember-me signatures | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Commits ------- a412f30 [SecurityBundle] Use config's secret in remember-me signatures
2 parents 686c704 + a412f30 commit 213381e

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ public function createAuthenticator(ContainerBuilder $container, string $firewal
128128
$tokenVerifier = $this->createTokenVerifier($container, $firewallName, $config['token_verifier'] ?? null);
129129
$container->setDefinition($rememberMeHandlerId, new ChildDefinition('security.authenticator.persistent_remember_me_handler'))
130130
->replaceArgument(0, new Reference($tokenProviderId))
131+
->replaceArgument(1, $config['secret'])
131132
->replaceArgument(2, new Reference($userProviderId))
132133
->replaceArgument(4, $config)
133134
->replaceArgument(6, $tokenVerifier)
@@ -136,6 +137,7 @@ public function createAuthenticator(ContainerBuilder $container, string $firewal
136137
$signatureHasherId = 'security.authenticator.remember_me_signature_hasher.'.$firewallName;
137138
$container->setDefinition($signatureHasherId, new ChildDefinition('security.authenticator.remember_me_signature_hasher'))
138139
->replaceArgument(1, $config['signature_properties'])
140+
->replaceArgument(2, $config['secret'])
139141
;
140142

141143
$container->setDefinition($rememberMeHandlerId, new ChildDefinition('security.authenticator.signature_remember_me_handler'))
@@ -205,7 +207,10 @@ public function addConfiguration(NodeDefinition $node)
205207
;
206208

207209
$builder
208-
->scalarNode('secret')->isRequired()->cannotBeEmpty()->end()
210+
->scalarNode('secret')
211+
->cannotBeEmpty()
212+
->defaultValue('%kernel.secret%')
213+
->end()
209214
->scalarNode('service')->end()
210215
->arrayNode('user_providers')
211216
->beforeNormalization()

src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php

+42-1
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ public function testRememberMeCookieInheritFrameworkSessionCookie($config, $same
419419
'firewalls' => [
420420
'default' => [
421421
'form_login' => null,
422-
'remember_me' => ['secret' => 'baz'],
422+
'remember_me' => [],
423423
],
424424
],
425425
]);
@@ -433,6 +433,7 @@ public function testRememberMeCookieInheritFrameworkSessionCookie($config, $same
433433

434434
$this->assertEquals($samesite, $definition->getArgument(3)['samesite']);
435435
$this->assertEquals($secure, $definition->getArgument(3)['secure']);
436+
$this->assertSame('%kernel.secret%', $definition->getArgument(1));
436437
}
437438

438439
/**
@@ -484,6 +485,46 @@ public function testCustomRememberMeHandler()
484485
$this->assertEquals([['firewall' => 'default']], $handler->getTag('security.remember_me_handler'));
485486
}
486487

488+
public function testSecretRememberMeHasher()
489+
{
490+
$container = $this->getRawContainer();
491+
492+
$container->register('custom_remember_me', \stdClass::class);
493+
$container->loadFromExtension('security', [
494+
'enable_authenticator_manager' => true,
495+
'firewalls' => [
496+
'default' => [
497+
'remember_me' => ['secret' => 'very'],
498+
],
499+
],
500+
]);
501+
502+
$container->compile();
503+
504+
$handler = $container->getDefinition('security.authenticator.remember_me_signature_hasher.default');
505+
$this->assertSame('very', $handler->getArgument(2));
506+
}
507+
508+
public function testSecretRememberMeHandler()
509+
{
510+
$container = $this->getRawContainer();
511+
512+
$container->register('custom_remember_me', \stdClass::class);
513+
$container->loadFromExtension('security', [
514+
'enable_authenticator_manager' => true,
515+
'firewalls' => [
516+
'default' => [
517+
'remember_me' => ['secret' => 'very', 'token_provider' => 'token_provider_id'],
518+
],
519+
],
520+
]);
521+
522+
$container->compile();
523+
524+
$handler = $container->getDefinition('security.authenticator.remember_me_handler.default');
525+
$this->assertSame('very', $handler->getArgument(1));
526+
}
527+
487528
public function sessionConfigurationProvider()
488529
{
489530
return [

0 commit comments

Comments
 (0)