def METHOD_NAME(self):
    """
    Makes authentication request
    """
    self.validate_config_credentials()
    req_data = {
        "client_id": self.config.client_id,
        "client_secret": self.config.client_secret,
        "grant_type": self.GRANT_TYPE,
    }
    credentials = {k: v for k, v in self.config.credentials.items()}
    try:
        response = self.session.post(
            self.TOKEN_URL_TEMPLATE.format(
                auth_base_uri=self.config.auth_base_uri.rstrip("/"),
                realm=self.config.realm,
            ),
            data=dict(req_data, **credentials),
            headers=USER_AGENT,
            timeout=HTTP_REQ_TIMEOUT,
        )
        response.raise_for_status()
    except requests.RequestException as e:
        if self.retrieved_token:
            # try using already retrieved token if authenticate() fails (OTP use-case)
            return CodeAuthorizedAuth(
                self.retrieved_token,
                self.config.token_provision,
                key=getattr(self.config, "token_qs_key", None),
            )
        response_text = getattr(e.response, "text", "").strip()
        # check if error is identified as auth_error in provider conf
        auth_errors = getattr(self.config, "auth_error_code", [None])
        if not isinstance(auth_errors, list):
            auth_errors = [auth_errors]
        if (
            hasattr(e.response, "status_code")
            and e.response.status_code in auth_errors
        ):
            raise AuthenticationError(
                "HTTP Error %s returned, %s\nPlease check your credentials for %s"
                % (e.response.status_code, response_text, self.provider)
            )
        # other error
        else:
            import traceback as tb
            logger.error(
                f"Provider {self.provider} returned {e.response.status_code}: {response_text}"
            )
            raise AuthenticationError(
                "Something went wrong while trying to get access token:\n{}".format(
                    tb.format_exc()
                )
            )
    self.retrieved_token = response.json()["access_token"]
    return CodeAuthorizedAuth(
        self.retrieved_token,
        self.config.token_provision,
        key=getattr(self.config, "token_qs_key", None),
    )