/**
  * Attempts to authenticate a TokenInterface object.
  *
  * @param TokenInterface $token The TokenInterface instance to authenticate
  *
  * @throws TokenBlockedHttpException
  * @throws TokenExpiredHttpException
  * @throws UserNotFoundHttpException
  * @return TokenInterface An authenticated TokenInterface instance, never null
  */
 public function authenticate(TokenInterface $token)
 {
     $accessToken = $token->getAccessToken();
     $accessTokenEntity = $this->accessTokenRepository->findOneByCode($accessToken);
     if (is_null($accessTokenEntity) || $accessTokenEntity->isBlocked()) {
         throw new TokenBlockedHttpException();
     }
     if ($accessTokenEntity->isExpired()) {
         throw new TokenExpiredHttpException();
     }
     $authenticatedToken = OAuth2Token::createFromAccessTokenEntity($accessTokenEntity);
     return $authenticatedToken;
 }