code: def _authn_response(self, context):
          
          state_data = context.state[self.name]
          aresp = self.consumer.parse_response(AuthorizationResponse, info=json.dumps(context.request))
          self._verify_state(aresp, state_data, context.state)
  
          rargs = {"code": aresp["code"], "redirect_uri": self.redirect_url,
                   "state": state_data["state"]}
  
          atresp = self.consumer.do_access_token_request(request_args=rargs, state=aresp["state"])
          if "verify_accesstoken_state" not in self.config or self.config["verify_accesstoken_state"]:
              self._verify_state(atresp, state_data, context.state)
  
          user_info = self.user_information(atresp["access_token"])
          internal_response = InternalData(auth_info=self.auth_info(context.request))
          internal_response.attributes = self.converter.to_internal(self.external_type, user_info)
          internal_response.subject_id = user_info[self.user_id_attr]
          del context.state[self.name]
          return self.auth_callback_func(context, internal_response)
docs: Handles the authentication response from the AS.
  
          :type context: satosa.context.Context
          :rtype: satosa.response.Response
          :param context: The context in SATOSA
          :return: A SATOSA response. This method is only responsible to call the callback function
          which generates the Response object.