[Python] libexchange MalformedResponseError error="invalid_token"'

Discussão em 'Python' iniciado por Stack, Março 5, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to read a shared mailbox from Exchange using libexchange on python. This is my code:

    def getExchangeMailBox():

    username = 'user@domain.com' ## make sure to give valid address
    tenant_id = '<mytenantid>'
    client_id = '<myclientid>'
    secret_value = '<mysecret>'
    version = Version(build=Build(15, 0, 12, 34))
    credentials = OAuth2Credentials(client_id=client_id, client_secret=secret_value, tenant_id=tenant_id,identity=username)

    config = Configuration(service_endpoint = 'https://outlook.office365.com/EWS/Exchange.asmx',
    credentials=credentials,
    auth_type=OAUTH2 ,
    version=version)
    account = Account(primary_smtp_address=username, credentials=credentials, autodiscover=False, config=config, access_type=IMPERSONATION)
    for item in account.inbox.all().order_by("-datetime_received")[:100]:
    logger.info(item.subject, item.sender, item.datetime_received)


    I added the authorization on the Entra portal as registered app, with these authorizations: Microsoft Graph (3)

    • EWS.AccessAsUser.All
    • Mail.Read
    • User.Read

    What I get is this error from application logging:

    WARNING:tzlocal:/etc/timezone is deprecated on Debian, and no longer reliable. Ignoring.
    ERROR:visualizer:Exception on / \[GET\]
    Traceback (most recent call last):
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/cached_property.py", line 63, in __get__
    return obj_dict\[name\]
    KeyError: 'inbox'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/cached_property.py", line 63, in __get__
    return obj_dict\[name\]
    KeyError: 'root'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/flask/app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions\[rule.endpoint\])(\*\*view_args) # type: ignore\[no-any-return\]
    File "/home/adm-mfrau/visualizer/visualizer.py", line 69, in returnExcelDF
    getExchangeMailBox()
    File "/home/adm-mfrau/visualizer/visualizer.py", line 55, in getExchangeMailBox
    for item in account.inbox.all().order_by("-datetime_received")\[:100\]:
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/cached_property.py", line 67, in __get__
    return obj_dict.setdefault(name, self.func(obj))
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/account.py", line 286, in inbox
    return self.root.get_default_folder(Inbox)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/cached_property.py", line 67, in __get__
    return obj_dict.setdefault(name, self.func(obj))
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/account.py", line 350, in root
    return Root.get_distinguished(account=self)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/folders/roots.py", line 145, in get_distinguished
    return cls.\_get_distinguished(
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/folders/base.py", line 226, in \_get_distinguished
    return cls.resolve(account=folder.account, folder=folder)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/folders/base.py", line 530, in resolve
    folders = list(FolderCollection(account=account, folders=\[folder\]).resolve())
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/folders/collections.py", line 335, in resolve
    yield from self.__class__(account=self.account, folders=resolveable_folders).get_folders(
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/folders/collections.py", line 403, in get_folders
    yield from GetFolder(account=self.account).call(
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/get_folder.py", line 51, in \_elems_to_objs
    for folder, elem in zip(self.folders, elems):
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/common.py", line 279, in \_chunked_get_elements
    yield from self.\_get_elements(payload=payload_func(chunk, \*\*kwargs))
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/common.py", line 300, in \_get_elements
    yield from self.\_response_generator(payload=payload)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/common.py", line 263, in \_response_generator
    response = self.\_get_response_xml(payload=payload)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/common.py", line 396, in \_get_response_xml
    r = self.\_get_response(payload=payload, api_version=api_version)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/services/common.py", line 347, in \_get_response
    r, session = post_ratelimited(
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/util.py", line 866, in post_ratelimited
    protocol.retry_policy.raise_response_errors(r)
    File "/home/adm-mfrau/visualizer/.venv/lib/python3.10/site-packages/exchangelib/protocol.py", line 738, in raise_response_errors
    raise MalformedResponseError(
    exchangelib.errors.MalformedResponseError: Unknown failure in response. Code: 403 headers: {'Cache-Control': 'private', 'Content-Length': '0', 'Content-Type': 'text/xml; charset=utf-8', 'Server': 'Microsoft-HTTPAPI/2.0', 'X-BEServer': 'MI2P293MB0038', 'X-NanoProxy': '1', 'X-AspNet-Version': '4.0.30319', 'Request-Id': '91119436-71b9-dd61-0833-cb1ba8e3e1be', 'X-CalculatedBETarget': 'MI2P293MB0038.ITAP293.PROD.OUTLOOK.COM', 'Restrict-Access-Confirm': '1', 'X-BeSku': 'WCS7', 'X-BackEndHttpStatus': '403', 'X-DiagInfo': 'MI2P293MB0038', 'x-ms-appId': '79909861-20d8-4e21-8d3a-8e79e9baee06', 'X-Proxy-BackendServerStatus': '403', 'X-Proxy-RoutingCorrectness': '1', 'X-RUM-NotUpdateQueriedPath': '1', 'X-RUM-NotUpdateQueriedDbCopy': '1', 'X-RUM-Validated': '1', 'X-UserType': 'Business', 'X-FEServer': 'ZR2P278CA0072', 'X-FirstHopCafeEFZ': 'ZRH', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains', 'MS-CV': 'NpQRkblxYd0IM8sbqOPhvg.1', 'Set-Cookie': 'exchangecookie=afb09f614196456b8d7b6fa8c4862b87; expires=Thu, 05-Mar-2026 17:15:57 GMT; path=/; secure; HttpOnly', 'WWW-Authenticate': 'Bearer client_id="00000002-0000-0ff1-ce00-000000000000", trusted_issuers="00000001-0000-0000-c000-000000000000@\*", token_types="app_asserted_user_v1 service_asserted_app_v1", error="invalid_token"', 'Date': 'Wed, 05 Mar 2025 17:15:57 GMT'} content:
    INFO:__main__:Finished


    I can't figure out what's the issue for: token_types="app_asserted_user_v1 service_asserted_app_v1", error="invalid_token"', because I think I set everything good from the Entra id application.

    Continue reading...

Compartilhe esta Página