**Description**

Currently the `SalesforceHook` only supports authentication via username, password, and security token.  The Salesforce API used under the hood supports a few other authentication types:
- Direct access via a session ID
- IP filtering
- JWT access

**Use case / motivation**

The `SalesforceHook` should support all authentication types supported by the underlying API.

**Are you willing to submit a PR?**
Yes 🚀 

**Related Issues**
#8766 

airflow/providers/salesforce/hooks/salesforce.py
"""
        Get all instances of the `object` from Salesforce.
        For each model, only get the fields specified in fields.
        All we really do underneath the hood is run:
            SELECT <fields> FROM <obj>;
        :param obj: The object name to get from Salesforce.
        :type obj: str
        :param fields: The fields to get from the object.
        :type fields: iterable
        :return: all instances of the object from Salesforce.
        :rtype: dict
        """
        query = f"SELECT {','.join(fields)} FROM {obj}"
        self.log.info(
            "Making query to Salesforce: %s",
            query if len(query) < 30 else " ... ".join([query[:15], query[-15:]]),
        )
        return self.make_query(query)
    @classmethod
    def _to_timestamp(cls, column: pd.Series) -> pd.Series: