oauth2.0 使用exchangelib扩展DL时面临的问题

dgenwo3n  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个使用flask构建的webapp。
现在,我有一个需求,需要我展开一个分发列表。我偶然发现了exchangelib库,并尝试使用它。
我可以毫无问题地进行配置。我使用的是OAuth2。我还有一个在Azure上注册的应用程序。
exchangelib配置为:

from exchangelib import OAuth2Credentials,Version,Build,Configuration,Account,Credentials,IMPERSONATION,OAUTH2
from exchangelib.version import EXCHANGE_O365

username = '<primary_smtp_email_id>' 
tenant_id = app.config['APP_TENANT_ID']
client_id = app.config['APP_CLIENT_ID']
secret_value = app.config['APP_CLIENT_SECRET']
version=Version(build=EXCHANGE_O365)
credentials = OAuth2Credentials(client_id=client_id, client_secret=secret_value, tenant_id=tenant_id)

config = Configuration(service_endpoint = 'https://outlook.office365.com/EWS/Exchange.asmx',
                        credentials=credentials,
                        auth_type=OAUTH2 , 
                        version=version)
account = Account(username, credentials=credentials, autodiscover=False, config=config, access_type=IMPERSONATION)

字符串
扩展DL的代码:

def print_expanded_dl(dl):
    for mailbox in account.protocol.expand_dl(dl):
        print(mailbox.email_address)


但是,当我调用print_expanded_dl函数时,我得到了一个错误。我遇到的错误是:

exchangelib.errors.ErrorInvalidExchangeImpersonationHeaderData: ExchangeImpersonation SOAP header must be present for this type of OAuth token.


请帮助,因为我搜索了类似的情况下,发现配置中的access_type需要设置为IMPERSONATION.我已经这样做了.此外,Azure上的应用程序具有以下权限:


的数据
此外,如果有任何其他方法来扩大一个通讯组列表使用其他一些库,随时建议相同.谢谢.

acruukt9

acruukt91#

您还需要在Credentials示例上设置identity属性,如https://ecederstrand.github.io/exchangelib/#oauth-authentication中所述

相关问题