code: def start_auth(self, context, internal_request, get_state=stateID):
          
          oauth_state = get_state(self.config["base_url"], rndstr().encode())
          context.state[self.name] = dict(state=oauth_state)
  
          request_args = dict(
              client_id=self.config['client_config']['client_id'],
              redirect_uri=self.redirect_url,
              state=oauth_state,
              allow_signup=self.config.get('allow_signup', False))
          scope = ' '.join(self.config['scope'])
          if scope:
              request_args['scope'] = scope
  
          cis = self.consumer.construct_AuthorizationRequest(
              request_args=request_args)
          return Redirect(cis.request(self.consumer.authorization_endpoint))
docs: :param get_state: Generates a state to be used in authentication call
  
          :type get_state: Callable[[str, bytes], str]
          :type context: satosa.context.Context
          :type internal_request: satosa.internal.InternalData
          :rtype satosa.response.Redirect