| 1 | <?php declare(strict_types=1); |
||
| 2 | |||
| 3 | namespace CustomerGauge\Cognito; |
||
| 4 | |||
| 5 | use Jose\Component\Checker\ClaimCheckerManager; |
||
| 6 | use Jose\Component\Checker\ExpirationTimeChecker; |
||
| 7 | use Jose\Component\Checker\IssuerChecker; |
||
| 8 | use Jose\Component\Core\AlgorithmManager; |
||
| 9 | use Jose\Component\Core\JWKSet; |
||
| 10 | use Jose\Component\Signature\Algorithm\RS256; |
||
| 11 | use Jose\Component\Signature\JWS; |
||
| 12 | use Jose\Component\Signature\JWSLoader; |
||
| 13 | use Jose\Component\Signature\JWSVerifier; |
||
| 14 | use Jose\Component\Signature\Serializer\CompactSerializer; |
||
| 15 | use Jose\Component\Signature\Serializer\JWSSerializerManager; |
||
| 16 | |||
| 17 | final class TokenParser |
||
| 18 | { |
||
| 19 | private $keyResolver; |
||
| 20 | |||
| 21 | 4 | public function __construct(KeyResolver $keyResolver) |
|
| 22 | { |
||
| 23 | 4 | $this->keyResolver = $keyResolver; |
|
| 24 | } |
||
| 25 | |||
| 26 | 4 | public function parse(string $token) |
|
| 27 | { |
||
| 28 | 4 | $jws = $this->loadAndVerifyWithKeySet($token); |
|
| 29 | |||
| 30 | 3 | $payload = json_decode($jws->getPayload(), true); |
|
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 31 | |||
| 32 | 3 | $claimCheckerManager = new ClaimCheckerManager([ |
|
| 33 | 3 | new IssuerChecker([$this->keyResolver->issuer()->toString()]), |
|
| 34 | 3 | new ExpirationTimeChecker, |
|
| 35 | 3 | ]); |
|
| 36 | |||
| 37 | 3 | $claimCheckerManager->check($payload); |
|
| 38 | |||
| 39 | 3 | return $payload; |
|
| 40 | } |
||
| 41 | |||
| 42 | 4 | private function loadAndVerifyWithKeySet(string $token): JWS |
|
| 43 | { |
||
| 44 | 4 | $jwsVerifier = new JWSVerifier(new AlgorithmManager([new RS256()])); |
|
| 45 | |||
| 46 | 4 | $serializerManager = new JWSSerializerManager([new CompactSerializer()]); |
|
| 47 | |||
| 48 | 4 | $jwsLoader = new JWSLoader($serializerManager, $jwsVerifier, null); |
|
| 49 | |||
| 50 | 4 | $jwkset = JWKSet::createFromJson($this->keyResolver->jwkset()); |
|
| 51 | |||
| 52 | 4 | return $jwsLoader->loadAndVerifyWithKeySet($token, $jwkset, $signature); |
|
| 53 | } |
||
| 54 | } |
||
| 55 |