public function createToken(Request $request)
 {
     try {
         $data = $this->manager->decode($request->query->get($this->options['signed_login_parameter']), $this->options['intention'])->getData();
     } catch (ExpiredException $e) {
         throw new AuthenticationException('Signed request expired', 0, $e);
     } catch (SignerException $e) {
         throw new AuthenticationException('Invalid signed request', 0, $e);
     }
     if (!isset($data['username'])) {
         throw new AuthenticationException('Invalid signed request - username required');
     }
     $token = new SignedRequestToken($data['username']);
     $token->setSignedData($data);
     return $token;
 }
 public function authenticate(TokenInterface $token)
 {
     /**
      * @var SignedRequestToken $token
      */
     $user = $this->provider->loadUserByUsername($token->getUsername());
     if (!$user instanceof UserInterface) {
         throw new AuthenticationServiceException('The user provider must return a UserInterface object.');
     }
     $signedData = $token->getSignedData();
     $token = new SignedRequestToken($user->getUsername(), $user->getRoles());
     $token->setSignedData($signedData);
     $token->setUser($user);
     $token->setAuthenticated(true);
     $this->userChecker->checkPostAuth($user);
     return $token;
 }