如何获得代表用户的权限列表-EWS Manage API

问题描述 投票:1回答:1

我正在尝试获取用户可以发送电子邮件的电子邮件地址列表。

这是一个代表用户发送电子邮件的应用程序,因此该应用程序没有用户凭据。而是,该应用程序已在Azure AD中注册,并具有对Office 365 Exchange Online的完全许可。应用程序会生成一个JWT令牌,该令牌可用于交换凭据,该令牌可以正常工作,并且当前应用程序能够代表用户发送电子邮件。

User     Email
A        [email protected]
B        [email protected]
C        [email protected]
D        [email protected]

如果用户A可以代表用户B,C和D发送电子邮件,我正在尝试获取用户B,C,D的电子邮件地址。因此,当前用户A已授予以B,C或D的身份发送的权限。

我正在尝试下面的代码

  var Service = new ExchangeService.ExchangeService(ExchangeVersion.Exchange2013);               
  Service.TraceFlags = ExchangeService.TraceFlags.None;
  Service.HttpHeaders.Add("X-AnchorMailbox", "[email protected]");
  Service.HttpHeaders.Add("X-PreferServerAffinity", "true");
  Service.EnableScpLookup = false;
  Service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
  Service.Credentials = new ExchangeService.OAuthCredentials(token);
  var result= Service.GetDelegates("[email protected]", true);

这现在给我错误

ExchangeImpersonation SOAP header must be present for this type of OAuth token

ErrorCode = ErrorInvalidExchangeImpersonationHeaderData

here中表示这是当”时,呼叫者未指定UPN,电子邮件地址或用户SID。如果呼叫者指定了一个或多个,且值为空“

但是此令牌是仅应用程序的令牌,其中应用程序已在Azure门户中授予Office 365 Exchange Online的完全权限。

不确定我是否正朝正确的方向解决这个问题?替代方法或无论如何都可以解决此问题

c# .net exchange-server exchangewebservices ews-managed-api
1个回答
1
投票

您不需要该行

 Service.AutodiscoverUrl("[email protected]", (discoverURL) => true);

因为您已经将EWS端点URL硬编码为

 Service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

并且使用Office365,只有一个端点是您设置的端点,因此即使AutodiscoverUrl返回结果,它也将是相同的URL。

© www.soinside.com 2019 - 2024. All rights reserved.