### Description

At the moment the Azure Data Factory hook only supports `TokenCredential` (service principal client ID and secret). It would be very useful to have support for other authentication types like managed identity. Preferably, we would create a `DefaultTokenCredential` if the client ID and secret are not provided in the connection.

### Use case/motivation

We're using Airflow on Azure Kubernetes Service and this would allow us to use the pod identity for authentication which is a lot cleaner than creating a service principal.

### 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)

airflow/providers/microsoft/azure/hooks/data_factory.py
self,
        run_id: str,
        expected_statuses: Union[str, Set[str]],
        resource_group_name: Optional[str] = None,
        factory_name: Optional[str] = None,
        check_interval: Optional[int] = 60,
        timeout: Optional[int] = 60 * 60 * 24 * 7,
    ) -> bool:
        """
        Waits for a pipeline run to match an expected status.
        :param run_id: The pipeline run identifier.
        :param expected_statuses: The desired status(es) to check against a pipeline run's current status.
        :param resource_group_name: The resource group name.
        :param factory_name: The factory name.
        :param check_interval: Time in seconds to check on a pipeline run's status.
        :param timeout: Time in seconds to wait for a pipeline to reach a terminal status or the expected
            status.
        :return: Boolean indicating if the pipeline run has reached the ``expected_status``.
        """
        pipeline_run_info = {
            "run_id": run_id,
            "factory_name": factory_name,
            "resource_group_name": resource_group_name,
        }
        pipeline_run_status = self.get_pipeline_run_status(**pipeline_run_info)
        start_time = time.monotonic()
        while (