GitHub user hditano created a discussion: Microsoft Graph API - Scopes should 
be an empty list or a list of strings Error

### Apache Airflow version

2.10.5

### If "Other Airflow 2 version" selected, which one?

_No response_

### What happened?

While trying to test a small DAG that sends an email and Teams webhook, it 
fails to send the email, even though all values (Client ID, Tenant ID, Client 
Secret) are correct. I even tested a small Python script to make sure the 
values were correct.

Granted User.ReadAll and Mail.Send as per permissions


```
e207a3c9daa2
 ▶ Log message source details
[2025-03-29, 18:13:42 UTC] {local_task_job_runner.py:123} ▶ Pre task execution 
logs
[2025-03-29, 18:13:42 UTC] {base.py:84} INFO - Retrieving connection 
'azure_graph_email'
[2025-03-29, 18:13:42 UTC] {msgraph.py:258} INFO - Creating Microsoft Graph SDK 
client v1.0 for conn_id: azure_graph_email
[2025-03-29, 18:13:42 UTC] {msgraph.py:263} INFO - Host: 
https://graph.microsoft.com/
[2025-03-29, 18:13:42 UTC] {msgraph.py:264} INFO - Base URL: 
https://graph.microsoft.com/v1.0
[2025-03-29, 18:13:42 UTC] {msgraph.py:265} INFO - Tenant id: xxxxxxxxxxxxxx
[2025-03-29, 18:13:42 UTC] {msgraph.py:266} INFO - Client id: 
xxxxxxxxxxxxxxxxxxx
[2025-03-29, 18:13:42 UTC] {msgraph.py:267} INFO - Client secret: ***
[2025-03-29, 18:13:42 UTC] {msgraph.py:268} INFO - API version: v1.0
[2025-03-29, 18:13:42 UTC] {msgraph.py:269} INFO - Scope: 
['https://graph.microsoft.com/.default']
[2025-03-29, 18:13:42 UTC] {msgraph.py:270} INFO - Verify: True
[2025-03-29, 18:13:42 UTC] {msgraph.py:271} INFO - Timeout: None
[2025-03-29, 18:13:42 UTC] {msgraph.py:272} INFO - Trust env: True
[2025-03-29, 18:13:42 UTC] {msgraph.py:273} INFO - Authority: 
https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxx
[2025-03-29, 18:13:42 UTC] {msgraph.py:274} INFO - Disable instance discovery: 
False
[2025-03-29, 18:13:42 UTC] {msgraph.py:275} INFO - Allowed hosts: 
['https://login.microsoftonline.com/xxxxxxxxxxxxxxxxx']
[2025-03-29, 18:13:42 UTC] {msgraph.py:276} INFO - Proxies: {}
[2025-03-29, 18:13:42 UTC] {msgraph.py:277} INFO - MSAL Proxies: {}
[2025-03-29, 18:13:42 UTC] {msgraph.py:278} INFO - HTTPX Proxies: {}
[2025-03-29, 18:13:42 UTC] {taskinstance.py:341} ▼ Post task execution logs
[2025-03-29, 18:13:42 UTC] {standard_task_runner.py:124} ERROR - Failed to 
execute job 63 for task send_email (Scopes should be an empty list or a list of 
strings; 107)
Traceback (most recent call last):
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 274, in _run_raw_task
    TaskInstance._execute_task_with_callbacks(
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 3161, in _execute_task_with_callbacks
    result = self._execute_task(context, task_orig)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 3185, in _execute_task
    return _execute_task(self, context, task_orig)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 768, in _execute_task
    result = _execute_callable(context=context, **execute_callable_kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 734, in _execute_callable
    return ExecutionCallableRunner(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/operator_helpers.py",
 line 252, in run
    return self.func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/baseoperator.py",
 line 424, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/operators/msgraph.py",
 line 140, in execute
    self.defer(
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/baseoperator.py",
 line 1800, in defer
    raise TaskDeferred(trigger=trigger, method_name=method_name, kwargs=kwargs, 
timeout=timeout)
airflow.exceptions.TaskDeferred
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/task/task_runner/standard_task_runner.py",
 line 117, in _start_by_fork
    ret = args.func(args, dag=self.dag)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/cli/cli_config.py", 
line 49, in command
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/cli.py", line 
116, in wrapper
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/cli/commands/task_command.py",
 line 483, in task_run
    task_return_code = _run_task_by_selected_method(args, _dag, ti)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/cli/commands/task_command.py",
 line 256, in _run_task_by_selected_method
    return _run_raw_task(args, ti)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/cli/commands/task_command.py",
 line 341, in _run_raw_task
    return ti._run_raw_task(
           ^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/session.py", 
line 97, in wrapper
    return func(*args, session=session, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 3006, in _run_raw_task
    return _run_raw_task(
           ^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 288, in _run_raw_task
    ti.defer_task(exception=defer, session=session)
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/session.py", 
line 94, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 3194, in defer_task
    _defer_task(ti=self, exception=exception, session=session)
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_internal/internal_api_call.py",
 line 166, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/session.py", 
line 94, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py",
 line 1677, in _defer_task
    trigger_row = Trigger.from_object(exception.trigger)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/api_internal/internal_api_call.py",
 line 166, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/session.py", 
line 97, in wrapper
    return func(*args, session=session, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/models/trigger.py", 
line 143, in from_object
    classpath, kwargs = trigger.serialize()
                        ^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/triggers/msgraph.py",
 line 160, in serialize
    "api_version": self.api_version,
                   ^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/triggers/msgraph.py",
 line 190, in api_version
    return self.hook.api_version
           ^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/hooks/msgraph.py",
 line 180, in api_version
    self.get_conn()  # Make sure config has been loaded through get_conn to 
have correct api version!
    ^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/airflow/providers/microsoft/azure/hooks/msgraph.py",
 line 298, in get_conn
    auth_provider = AzureIdentityAuthenticationProvider(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/home/airflow/.local/lib/python3.12/site-packages/kiota_authentication_azure/azure_identity_authentication_provider.py",
 line 34, in __init__
    AzureIdentityAccessTokenProvider(
  File 
"/home/airflow/.local/lib/python3.12/site-packages/kiota_authentication_azure/azure_identity_access_token_provider.py",
 line 42, in __init__
    raise TypeError(f"Scopes {list_error}")
TypeError: Scopes should be an empty list or a list of strings
[2025-03-29, 18:13:42 UTC] {local_task_job_runner.py:266} INFO - Task exited 
with return code 1
[2025-03-29, 18:13:42 UTC] {taskinstance.py:3901} INFO - 0 downstream tasks 
scheduled from follow-on schedule check
[2025-03-29, 18:13:42 UTC] {local_task_job_runner.py:245} ▲▲▲ Log group end

```


<img width="876" alt="Image" 
src="https://github.com/user-attachments/assets/37f5690a-8338-4c91-afb3-02b46b3145aa";
 />

### What you think should happen instead?

_No response_

### How to reproduce

Just run the DAG as usual and it will fail to send the email / connect to Graph 
API every single time.

### Operating System

Ubuntu 22.04 LTS

### Versions of Apache Airflow Providers

_No response_

### Deployment

Docker-Compose

### Deployment details

_No response_

### Anything else?

_No response_

### Are you willing to submit 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)


GitHub link: https://github.com/apache/airflow/discussions/64624

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to