【问题标题】:Get list of on-behalf of users permission - EWS Manage API获取代表用户权限列表 - EWS Manage API
【发布时间】:2020-01-18 11:22:01
【问题描述】:

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

这是一个代表用户发送电子邮件的应用程序,因此应用程序没有用户凭据。相反,应用程序在 Azure AD 中注册并拥有对 Office 365 Exchange Online 的完全权限。应用程序生成一个 JWT 令牌,它用于交换凭据,它工作正常,当前应用程序能够代表用户发送电子邮件。

User     Email
A        a@test.com
B        b@test.com
C        c@test.com
D        d@test.com

如果用户 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", "a@test.com");
  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("a@test.com", 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】:

    你不需要这条线

     Service.AutodiscoverUrl("a@test.com", (discoverURL) => true);
    

    因为您已经在

    中硬编码了 EWS 端点 URL
     Service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多