Skip to content

Commit 4419c6d

Browse files
[Security] Add clock dependency to OidcTokenHandler
From "web-token/jwt-checker": The parameter "$clock" will become mandatory in 4.0.0. Please set a valid PSR Clock implementation instead of "null".
1 parent 67def3c commit 4419c6d

File tree

4 files changed

+14
-7
lines changed

4 files changed

+14
-7
lines changed

AccessToken/Oidc/OidcTokenHandler.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
use Jose\Component\Signature\JWSVerifier;
2121
use Jose\Component\Signature\Serializer\CompactSerializer;
2222
use Jose\Component\Signature\Serializer\JWSSerializerManager;
23+
use Psr\Clock\ClockInterface;
2324
use Psr\Log\LoggerInterface;
24-
use Symfony\Component\Clock\NativeClock;
25+
use Symfony\Component\Clock\Clock;
2526
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
2627
use Symfony\Component\Security\Http\AccessToken\AccessTokenHandlerInterface;
2728
use Symfony\Component\Security\Http\AccessToken\Oidc\Exception\InvalidSignatureException;
@@ -41,6 +42,7 @@ public function __construct(
4142
private Algorithm $signatureAlgorithm,
4243
private JWK $jwk,
4344
private ?LoggerInterface $logger = null,
45+
private ClockInterface $clock = new Clock(),
4446
private string $claim = 'sub',
4547
private ?string $audience = null
4648
) {
@@ -74,11 +76,10 @@ public function getUserBadgeFrom(string $accessToken): UserBadge
7476
$headerCheckerManager->check($jws, 0);
7577

7678
// Verify the claims
77-
$clock = class_exists(NativeClock::class) ? new NativeClock() : null;
7879
$checkers = [
79-
new Checker\IssuedAtChecker(0, false, $clock),
80-
new Checker\NotBeforeChecker(0, false, $clock),
81-
new Checker\ExpirationTimeChecker(0, false, $clock),
80+
new Checker\IssuedAtChecker(0, false, $this->clock),
81+
new Checker\NotBeforeChecker(0, false, $this->clock),
82+
new Checker\ExpirationTimeChecker(0, false, $this->clock),
8283
];
8384
if ($this->audience) {
8485
$checkers[] = new Checker\AudienceChecker($this->audience);
@@ -93,7 +94,7 @@ public function getUserBadgeFrom(string $accessToken): UserBadge
9394

9495
// UserLoader argument can be overridden by a UserProvider on AccessTokenAuthenticator::authenticate
9596
return new UserBadge($claims[$this->claim], fn () => $this->createUser($claims), $claims);
96-
} catch (\Throwable $e) {
97+
} catch (\Exception $e) {
9798
$this->logger?->error('An error while decoding and validating the token.', [
9899
'error' => $e->getMessage(),
99100
'trace' => $e->getTraceAsString(),

AccessToken/Oidc/OidcUserInfoTokenHandler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function getUserBadgeFrom(string $accessToken): UserBadge
4949

5050
// UserLoader argument can be overridden by a UserProvider on AccessTokenAuthenticator::authenticate
5151
return new UserBadge($claims[$this->claim], fn () => $this->createUser($claims), $claims);
52-
} catch (\Throwable $e) {
52+
} catch (\Exception $e) {
5353
$this->logger?->error('An error occurred on OIDC server.', [
5454
'error' => $e->getMessage(),
5555
'trace' => $e->getTraceAsString(),

Tests/AccessToken/Oidc/OidcTokenHandlerTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Jose\Component\Signature\Serializer\CompactSerializer;
1919
use PHPUnit\Framework\TestCase;
2020
use Psr\Log\LoggerInterface;
21+
use Symfony\Component\Clock\Clock;
2122
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
2223
use Symfony\Component\Security\Core\User\OidcUser;
2324
use Symfony\Component\Security\Http\AccessToken\Oidc\OidcTokenHandler;
@@ -55,6 +56,7 @@ public function testGetsUserIdentifierFromSignedToken(string $claim, string $exp
5556
new ES256(),
5657
$this->getJWK(),
5758
$loggerMock,
59+
new Clock(),
5860
$claim,
5961
self::AUDIENCE
6062
))->getUserBadgeFrom($token);
@@ -88,6 +90,7 @@ public function testThrowsAnErrorIfTokenIsInvalid(string $token)
8890
new ES256(),
8991
$this->getJWK(),
9092
$loggerMock,
93+
new Clock(),
9194
'sub',
9295
self::AUDIENCE
9396
))->getUserBadgeFrom($token);
@@ -146,6 +149,7 @@ public function testThrowsAnErrorIfUserPropertyIsMissing()
146149
new ES256(),
147150
self::getJWK(),
148151
$loggerMock,
152+
new Clock(),
149153
'email',
150154
self::AUDIENCE
151155
))->getUserBadgeFrom($token);

composer.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
},
2727
"require-dev": {
2828
"symfony/cache": "^5.4|^6.0",
29+
"symfony/clock": "^6.3",
2930
"symfony/expression-language": "^5.4|^6.0",
3031
"symfony/http-client-contracts": "^3.0",
3132
"symfony/rate-limiter": "^5.4|^6.0",
@@ -37,6 +38,7 @@
3738
"web-token/jwt-signature-algorithm-ecdsa": "^3.1"
3839
},
3940
"conflict": {
41+
"symfony/clock": "<6.3",
4042
"symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9",
4143
"symfony/http-client-contracts": "<3.0",
4244
"symfony/security-bundle": "<5.4",

0 commit comments

Comments
 (0)