/** * @param JwtContext $context * @throws \BWC\Component\JwtApiBundle\Error\JwtException */ public function handleContext(JwtContext $context) { $token = $context->getRequestJwtToken(); if ($this->logger) { $this->logger->debug('DecoderHandler.token', array('token' => $token)); } /** @var MethodJwt $jwt */ $jwt = $this->encoder->decode($token, $this->class); if ($this->logger) { $this->logger->debug('DecoderHandler.jwt', array('jwt' => $jwt)); } if (false == $jwt instanceof MethodJwt) { throw new JwtException(sprintf("Expected MethodJwt but got '%s'", get_class($jwt))); } $context->setRequestJwt($jwt); }
/** * @param JwtContext $context */ public function handleContext(JwtContext $context) { if ($context->getResponseJwt()) { $keys = $context->optionGet(ContextOptions::KEYS); if ($this->logger) { $this->logger->debug('EncoderHandler.keys', array('keys' => $keys)); } if (is_array($keys)) { $token = $this->encoder->encode($context->getResponseJwt(), array_shift($keys)); if ($this->logger) { $this->logger->debug('EncoderHandler.token', array('token' => $token)); } $context->setResponseToken($token); } } else { if ($this->logger) { $this->logger->debug('EncoderHandler.noResponseJwt'); } } }
/** * @param \BWC\Component\JwtApiBundle\Context\JwtContext $context * @throws \Exception */ public function validate(JwtContext $context) { $jwt = $context->getRequestJwt(); if (false == $jwt instanceof Jose) { throw new JwtException('Expected jose to validate signature'); } $keys = $context->optionGet(ContextOptions::KEYS); if (false == is_array($keys)) { throw new JwtException('Expected array of keys'); } $exception = null; foreach ($keys as $key) { try { $this->encoder->verify($jwt, $key); $exception = null; break; } catch (\Exception $ex) { $exception = $ex; } } if ($exception) { throw $exception; } }