*/
public function validate(string $clientId): bool
{
- parent::validateCommonClaims();
+ parent::validateCommonTokenDetails($clientId);
$this->validateTokenClaims($clientId);
return true;
*
* @throws OidcInvalidTokenException
*/
- public function validateCommonTokenDetails(): bool
+ public function validateCommonTokenDetails(string $clientId): bool
{
$this->validateTokenStructure();
$this->validateTokenSignature();
- $this->validateCommonClaims();
+ $this->validateCommonClaims($clientId);
return true;
}
*
* @throws OidcInvalidTokenException
*/
- protected function validateCommonClaims(): void
+ protected function validateCommonClaims(string $clientId): void
{
// 1. The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery)
// MUST exactly match the value of the iss (issuer) Claim.
}
$aud = is_string($this->payload['aud']) ? [$this->payload['aud']] : $this->payload['aud'];
- if (!in_array($this->payload['aud'], $aud, true)) {
+ if (!in_array($clientId, $aud, true)) {
throw new OidcInvalidTokenException('Token audience value did not match the expected client_id');
}
}
);
try {
- $response->validate($idToken->getClaim('sub'));
+ $response->validate($idToken->getClaim('sub'), $settings->clientId);
} catch (OidcInvalidTokenException $exception) {
throw new OidcException("Userinfo endpoint response validation failed with error: {$exception->getMessage()}");
}
/**
* @throws OidcInvalidTokenException
*/
- public function validate(string $idTokenSub): bool
+ public function validate(string $idTokenSub, string $clientId): bool
{
if (!is_null($this->jwt)) {
- $this->jwt->validateCommonTokenDetails();
+ $this->jwt->validateCommonTokenDetails($clientId);
}
$sub = $this->getClaim('sub');
// 2. aud claim present
['Missing token audience value', ['aud' => null]],
// 2. aud claim validates all values against those expected (Only expect single)
- ['Token audience value has 2 values, Expected 1', ['aud' => ['abc', 'def']]],
+ ['Token audience value has 2 values, Expected 1', ['aud' => ['xxyyzz.aaa.bbccdd.123', 'def']]],
// 2. aud claim matches client id
['Token audience value did not match the expected client_id', ['aud' => 'xxyyzz.aaa.bbccdd.456']],
// 4. azp claim matches client id if present