/**
  * @param ParsedToken $parsed
  * @throws InvalidException if token validation fails
  */
 protected function verifyParsedToken(ParsedToken $parsed)
 {
     if ($parsed->verify($this->signer, $this->config->getPublicKey())) {
         return;
     }
     throw new InvalidException('Token signature is not valid', InvalidException::CODE_TOKEN_INVALID);
 }
 /**
  * @inheritDoc
  */
 public function parseToken($token)
 {
     try {
         $metadata = (array) JWT::decode((string) $token, $this->config->getPublicKey(), [$this->config->getAlgorithm()]);
     } catch (ExpiredException $e) {
         throw new InvalidException('Token has expired: ' . $token, InvalidException::CODE_TOKEN_EXPIRED);
     }
     return new Token($token, $metadata);
 }
 /**
  * @param array $claims
  * @return string
  */
 public function getToken(array $claims = [])
 {
     $issuer = (string) $this->request->getUri();
     $issued_at = $this->config->getTimestamp();
     $expiration = $issued_at + $this->config->getTtl();
     $key = $this->config->getPublicKey();
     $algorithm = $this->config->getAlgorithm();
     $claims += ['iss' => $issuer, 'iat' => $issued_at, 'exp' => $expiration];
     return JWT::encode($claims, $key, $algorithm);
 }
 /**
  * @param array $claims
  * @return string
  */
 public function getToken(array $claims = [])
 {
     $issuer = (string) $this->request->getUri();
     $issued_at = $this->config->getTimestamp();
     $expiration = $issued_at + $this->config->getTtl();
     $key = $this->config->getPrivateKey();
     foreach ($claims as $name => $value) {
         $this->builder->set($name, $value);
     }
     $token = $this->builder->setIssuer($issuer)->setIssuedAt($issued_at)->setExpiration($expiration)->sign($this->signer, $key)->getToken();
     return (string) $token;
 }