### Description

Authentication using OAuth for Databricks Service Principals is now in Public Preview.  I would like to implement this into the Databricks Hook.   By adding "service_principal_oauth" as a boolean value set to `true` in the extra configuration, the Client Id and Client Secret can be supplied as a username and password.

https://docs.databricks.com/dev-tools/authentication-oauth.html

### Use case/motivation

Before Authentication using Oauth the only way to use the Databricks Service Principals was by another user account performing a token request on-behalf of the Service Principal.  This process is difficult to utilize in the real world, but this new way of collecting access tokens changes the process and should make a big difference.

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

"""
        Function to get AAD token for given resource.
        Supports managed identity or service principal auth.
        :param resource: resource to issue token to
        :return: AAD token, or raise an exception
        """
        aad_token = self.aad_tokens.get(resource)
        if aad_token and self._is_aad_token_valid(aad_token):
            return aad_token["token"]
        self.log.info("Existing AAD token is expired, or going to expire soon. Refreshing...")
        try:
            for attempt in self._get_retry_object():
                with attempt:
                    if self.databricks_conn.extra_dejson.get("use_azure_managed_identity", False):
                        params = {
                            "api-version": "2018-02-01",
                            "resource": resource,
                        }
                        resp = requests.get(
                            AZURE_METADATA_SERVICE_TOKEN_URL,
                            params=params,
                            headers={**self.user_agent_header, "Metadata": "true"},
                            timeout=self.aad_timeout_seconds,
                        )
                    else:
                        tenant_id = self.databricks_conn.extra_dejson["azure_tenant_id"]
                        data = {
                            "grant_type": "client_credentials",
                            "client_id": self.databricks_conn.login,
                            "resource": resource,