code: def verify(token, public_key, validate_nonce=None, algorithms=[DEFAULT_ALGORITHM]):
      
      try:
          token_data = jwt.decode(token, public_key, algorithms=algorithms)
      except jwt.InvalidTokenError:
          logger.debug('JWT failed verification')
          return False
  
      claimed_username = token_data.get('username')
      claimed_time = token_data.get('time', 0)
      claimed_nonce = token_data.get('nonce')
  
      # Ensure time is within acceptable bounds
      current_time = time.time()
      min_time, max_time = (current_time - TIMESTAMP_TOLERANCE, current_time + TIMESTAMP_TOLERANCE)
      if claimed_time < min_time or claimed_time > max_time:
          logger.debug('Claimed time is outside of allowable tolerances')
          return False
  
      # Ensure nonce is unique
      if validate_nonce:
          if not validate_nonce(claimed_username, claimed_time, claimed_nonce):
              logger.debug('Claimed nonce failed to validate')
              return False
      else:
          logger.warning('validate_nonce function was not supplied!')
  
      # If we've gotten this far, the token is valid
      return token_data
docs: Verify the validity of the given JWT using the given public key.
  
      :param token: JWM claim
      :param public_key: Public key to use when verifying the claim's signature.
      :param validate_nonce: Callable to use to validate the claim's nonce.
      :param algorithms: Allowable signing algorithms. Defaults to ['RS512'].
      :return: False if the token is determined to be invalid or a dictionary of the token data if it is valid.