requireHeaders = [ 'alg', 'typ', ]; } public function addRequiredClaim(string $name) { $this->requireClaims[$name] = true; } public function addRequiredClaimWithValue(string $name, $value) { $this->requireClaims[$name] = [ $value ]; } public function validateToken(JwtToken $token) { if (!$token->isValid()) { throw new JwtTokenException("The token is not valid"); } if (!$token->header->hasAll($this->requireHeaders)) { throw new JwtHeaderException("The token is missing one or more required headers"); } if (!$token->claims->hasAll($this->requireClaims)) { throw new JwtHeaderException("The token is missing one or more required claims"); } return true; } public function validate(KeyInterface $key, string $raw) { $token = new JwtToken($key, $raw); if ($this->validateToken($token)) { return $token; } } }