def METHOD_NAME(self, **kwargs):
    '''
    This method handles authentication for both API Keys and for session
    authentication.
    '''
    # Here we are grafting the authentication functions into the keyword
    # arguments for later usage.  If a function is provided in the keywords
    # under the key names below, we will use those instead.  This should
    # essentially allow for the authentication logic to be overridden with
    # minimal effort.
    kwargs['key_auth_func'] = kwargs.get('key_auth_func',
                                         self._key_auth)
    kwargs['session_auth_func'] = kwargs.get('session_auth_func',
                                             self._session_auth)
    # Pull the API keys from the keyword arguments passed to the
    # constructor and build the keys tuple.  As API Keys will be
    # injected directly into the session, there is no need to store these.
    keys = kwargs.get('_key_auth_dict', {
        'access_key': kwargs.get('access_key',
                                 os.getenv(f'{self._env_base}_ACCESS_KEY')
                                 ),
        'secret_key': kwargs.get('secret_key',
                                 os.getenv(f'{self._env_base}_SECRET_KEY')
                                 )
    })
    # The session authentication tuple.  We will be storing these as its
    # possible for the session to timeout on the user.  This would require
    # re-authentication.
    self._auth = kwargs.get('_session_auth_dict', {
        'username': kwargs.get('username',
                               os.getenv(f'{self._env_base}_USERNAME')
                               ),
        'password': kwargs.get('password',
                               os.getenv(f'{self._env_base}_PASSWORD')
                               )
    })
    # Run the desired authentication function.  As API keys are generally
    # preferred over session authentication, we will first check to see
    # that keys have been set, as we prefer stateless auth to stateful.
    if None not in [v for _, v in keys.items()]:
        kwargs['key_auth_func'](**keys)
    elif None not in [v for _, v in self._auth.items()]:
        kwargs['session_auth_func'](**self._auth)
    else:
        warnings.warn('Starting an unauthenticated session',
                      AuthenticationWarning)
        self._log.warning('Starting an unauthenticated session.')