ExchangeImpersonation SOAP头必须在Python中为这种类型的OAuth令牌存在



最近微软撤回了用于访问Exchange service的基本身份验证服务。因此,我正在努力将身份验证从基本转换为基于OAuth的身份验证。然而,在测试过程中,我遇到了以下异常:

File "/usr/local/lib/python3.6/site-packages/exchangelib/services/common.py", line 423, in _raise_soap_errors
raise vars(errors)[code](msg)
exchangelib.errors.ErrorInvalidExchangeImpersonationHeaderData: ExchangeImpersonation SOAP header must be present for this type of OAuth token.

我经过这里提到的建议https://github.com/ecederstrand/exchangelib/issues/735解决但没有运气解决问题。

#实现
redentials = OAuth2Credentials(
client_id=self.client_id, client_secret=self.client_secret, tenant_id=self.tenant_id,
identity=Identity(smtp_address=self.email_address)
)
log.info(f"Credentials ==>{credentials}")
config = Configuration(server=self.email_server, credentials=credentials,  auth_type=OAUTH2,  version=Version(build=EXCHANGE_O365))
self.account = Account(self.email_address, access_type=DELEGATE, config=config)
任何解决上述异常的建议都将大有帮助。提前感谢

当您使用client_credentials流时,您需要在EWS中使用模拟,例如change

access_type=DELEGATE

access_type=IMPERSONATION

您还需要确保您的应用程序注册full_access_as_app许可和同意参见https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

最新更新